Component-based Architecture

Problem

Chcielibyśmy zwiększyć reużywalność kodu, jego elastyczność oraz szybkość wytwarzania aktualnie opracowywanych oraz przyszłych systemów

Rozwiązanie

Korzystamy z podejścia component-based architecture.

Żeby mówić o podejściu component-based architecture (inne nazwy to component-based development / component-based software engineering) musimy najpierw zdefiniować co to jest komponent. Komponent jest to hermetyczny i wymienny element oprogramowania dostarczający swoje funkcjonalności za pomocą interfejsów. Komponenty są jednostkami przetwarzania i mogą składać się z jednego bądź kilku modułów - jednostek implementacji. Komponenty posiadają następujące cechy:

  • dostarczają określone funkcjonalności za pomocą interfejsów

  • komponent może implementować jeden lub więcej interfejsów

  • zbiór interfejsów implementowanych przez komponent to kontrakt

  • funkcjonalności komponentu umożliwiają przewidzenie właściwości systemu wykorzystującego dany komponent

  • stanowią pewną abstrakcję, na bazie której mogą być budowane inne moduły i komponenty

Component-based architecture - jest to z kolei styl budowy architektury polegający na wykorzystaniu gotowych komponentów. Jest to podejście zaproponowane na konferencji NATO w 1968 roku w prezentacji “Mass produced software components”. System komponentowy jest zbudowany na bazie kilku określonych komponentów. Zbiór komponentów ich interfejsów oraz powiązań pomiędzy nimi nazywamy modelem komponentowym.

Konsekwencje

Poniżej lista zalet podejścia komponentowego:

  • zwiększa reużywalność kodu i szybsze wytwarzanie oprogramowania

  • zwiększa elastyczność - łatwe dodawanie nowych funkcjonalności i usuwanie błędów w systemach korzystających z komponentów - zmianę wprowadzona do komponentu pojawi się we wszystkich systemach z niego korzystających

  • zwiększa wydajność i dostępność - komponenty zazwyczaj są dopracowane pod kątem wydajności i dostępności

Podejście komponentowe ma też swoje wady:

  • częsta konieczność dostosowywania interfejsów komponentu do wymaganych przez system (wzorzec adapter)

  • wolniejsze wytwarzanie systemu, z którego chcemy wydzielić komponent/komponenty

  • brak kontroli nad komponentami third-party - w przypadku napotkanego błędu konieczne jest wykonywanie obejść co powoduje komplikację kodu i spowalnia wytwarzanie

Comments