W architekturze komponentowej oprogramowanie budowane jest w oparciu o współpracujących ze sobą, niezależne komponenty programowe. Komponent to element oprogramowania posiadający dobrze wyspecyfikowany interfejs oraz zachowanie. Każdy komponent powinien realizować założoną funkcjonalność i dostarczać jej innym komponentom tylko za pośrednictwem własnego interfejsu. Komponenty traktuje się jako twory generyczne. Dopiero zbiór takich połączonych ze sobą komponentów stanowi rzeczywistą aplikację. Dany komponent może być wykorzystany w wielu aplikacjach. Warto zauważyć, że komponent to element gotowy do użycia (np. skompilowana wersja biblioteki).
Zalety architektury komponentowej
- Komponenty mogą być wykorzystane w wielu aplikacjach. Każdy komponent może zawierać swoją własną konfigurację i być konfigurowany w różny sposób dla różnych aplikacji;
- Skraca czas budowy nowych aplikacji i obniża koszty projektu - poprzez zastosowanie istniejących komponentów. Wykorzystując istniejące komponenty po pierwsze, nie musimy ich pisać od nowa, po drugie testować i dokumentować. Poszczególne komponenty mogą być tworzone równolegle. Poprzez dobre wyspecyfikowanie interfejsów poszczególnych komponentów można łatwo zlecać implementacje komponentów na zewnątrz;
- Wspiera tzw. modyfikowalność aplikacji - konkretna funkcjonalność skupia się w dedykowanych komponentach programowych więc w przypadku konieczności wprowadzenia zmiany, z reguły proces ten dotyczy modyfikacji jednego lub co najwyżej kilku komponentów a nie całej aplikacji. Tutaj warto zwrócić zatem uwagę na spójność funkcjonalną poszczególnych komponentów (ang. coherence). Spójność komponentów wspiera modyfikowalność - im większa spójność tym łatwiej modyfikować aplikację.
Przykładem architektury komponentowej jest architektura EJB, gdzie poszczególne ziarenka stanowią komponenty, których logika biznesowa może być udostępniana przez wyspecyfikowane interfejsy ( @Remote/Local). Poszczególne komponenty EJB są osadzone i zarządzane przez serwer aplikacyjny.
Poniżej przedstawiłem schemat poglądowy prostej aplikacji, w której logika biznesowa jest zrealizowana w architekturze komponentowej.