Skip to content

Instantly share code, notes, and snippets.

@cardil
Last active January 15, 2019 23:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cardil/de99bf8b52e2d3de39530acaf8f1281a to your computer and use it in GitHub Desktop.
Save cardil/de99bf8b52e2d3de39530acaf8f1281a to your computer and use it in GitHub Desktop.
Bill of Materials (BOM) dla JS [PL]

Chciałem opisać koncept pracy nad dużym projektem. Wyobraźmy sobie duży projekt, wiele osób, wiele zakresów biznesowych, wiele osobnych backendów, wszystko powinno być zintegrowane do jednej spójnej aplikacji. Przy takim projekcie proponowałbym pracę w z użyciem projektu BOM (Bill of Materials).

Ten koncept wywodzi się z skomplikowanych projektów ze świata Java.

Poniżej graf przedstawiający taką strukturę.

        ╭─────────────╮
        │ Application │
        ╰─────────────╯
               │
    ╭──────────┼────────────╮
    │          │            │
    │          │  ╭─────────│──────────────╮
    │          │  │         │              │
╭───▼───╮   ╭──▼────╮   ╭───▼───╮     ╭────▼─────────╮
│ Mod 1 │   │ Mod 2 │   │ Mod 3 │─────▶ Internal lib │ 
╰───────╯   ╰───────╯   ╰───────╯     ╰──────────────╯
     │          │           │           │
     ╰──────────┼───────────╯───────────╯
                │
           ╭────▼────╮
    ╭──────│   BOM   │────────╮
    │      ╰─────────╯        │          Internal NPM
....│...........│.............│......................
    │           │             │            Public NPM
╭───▼─────╮  ╭──▼──────╮  ╭───▼──────╮
│ Angular │  │ ExLib 1 │  │  ExLib 2 │
╰─────────╯  ╰─────────╯  ╰──────────╯

Opiszę to trochę. Każdy z boxów oznacza osobny pakiet NPM, posiadający odrębną historię w Git i jest wydawany do repozytorium NPM zgodnie z zasadami semver.org.

Opisując od samej góry:

  1. Aplikacja - integruje moduły biznesowe, sama w sobie nie ma za dużo kodu, gdyż moduły są samowystarczalne. Integruje moduły za pomocą deklarowania zależności poprzez package.json. Zawiera główny router aplikacji. Posiada testy które weryfikują, iż moduły które używa mają kompatybilną (lub identyczną) wersję BOM
  2. Moduły aplikacyjne - samodzielne moduły, które można rozwijać niezależnie. Można je uruchomić w przeglądarce, testować unit oraz end 2 end. Moduły nie deklarują zależności do żadnych bibliotek publicznych, jedynie prywatnych oraz do BOM.
  3. Wewnętrzne biblioteki - biblioteki re-używalne, zawierają komponenty wspólne potrzebne w więcej niż jednym module. Mogą być używane w we wszystkich modułach lub tylko w niektórych. Zawierają jedynie deklarację (jedną) zależności do BOM.
  4. Bill of Materials (BOM) - zawiera wszystkie niezbędne deklaracje zależności bibliotek publicznych używanych we wszystkich modułach danej aplikacji. Nie zawiera żadnego kodu (lub ewentualnie testy weryfikujące poprawność rozwiązanych zależności) Celem projektu BOM jest zebranie biblioteki w formie sprawdzonych, działających ze sobą zależności. Nad aktualizacją BOM pełnią pieczę architekci i seniorzy, podobnie jak w przypadku bibliotek wewnętrznych.
  5. Angular, ExLib - Ogólnie dostępne pakiety NPM z npmjs.org
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment