Komponent to najmniejsza jednostka wdrożeniowa programu lub systemu.
Jest to zgrupowanie powiązanych klas i modułów, które są wdrażane, wersjonowane i zarządzane razem.

Komponentem może być na przykład:

  • paczka NPM
  • biblioteka JAR
  • moduł w monorepo
  • osobny mikroserwis

Spójność komponentów:

Reuse/Release Equivalence Principle(REP) – zasada istotności numeru wydania

Zasada mówi, że jednostką ponownego użycia jest jednostka wydania.
Oznacza to, że każda zmiana w komponencie powinna wiązać się z wydaniem nowej wersji komponentu.

Każdy komponent:

  • posiada numer wersji,
  • posiada dokumentację lub changelog, który opisuje, co zmieniło się w danej wersji,
  • jest wydawany jako spójna całość.

Dzięki temu programista korzystający z komponentu sam decyduje, kiedy przechodzi na nowszą wersję, a zmiany w komponencie nie wymuszają natychmiastowych modyfikacji w całej aplikacji.

Common Closure Principle (CCP) – zasada wspólnego domknięcia

CCP jest odpowiednikiem zasady SRP na poziomie komponentów.
W jednym komponencie powinny znajdować się klasy, które mają ten sam powód do zmiany.

Dzięki temu, gdy zmienia się jedna reguła biznesowa, modyfikujemy jeden komponent, a nie wiele klas rozsianych po całej aplikacji.

Jeżeli zmiana jednego wymagania powoduje: commity w 5 komponentach, prawdopodobnie CCP jest złamane.

Common Reuse Principle(CRP) – zasada wspólnego użycia

Zasada mówi, że klasy, które są używane razem, powinny być umieszczone w tym samym komponencie.
Jednocześnie nie powinniśmy zmuszać użytkowników komponentu do zależności od klas, których nie potrzebują.

Jeżeli komponent zawiera wiele niepowiązanych funkcjonalności, każda zmiana w nim może wymusić aktualizację wersji, nawet wtedy, gdy używana jest tylko niewielka jego część.

Podsumowanie

Najważniejsze jest to, że nie da się jednocześnie maksymalnie spełnić wszystkich trzech zasad: REP, CCP i CRP.

Na początku życia projektu zazwyczaj większy nacisk kładzie się na CCP, ponieważ częste zmiany biznesowe wymagają łatwego modyfikowania kodu.

Wraz z rozwojem systemu coraz większego znaczenia nabiera REP, ponieważ stabilność, wersjonowanie i możliwość kontrolowanego aktualizowania komponentów stają się kluczowe.

Projektowanie komponentów to zawsze świadomy kompromis, a nie ślepe trzymanie się jednej zasady.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *