Dziś przyszedł czas na poruszenie tematu architektury aplikacji typu enterprise. Planuje napisać cykl postów m.in. o różnych wzorcach projektowych wykorzystywanych do budowy kolejnych warstw systemu. Zacznę od totalnych podstaw, które mają na celu wyjaśnienie z czego tak naprawdę powinna się składać solidna aplikacja. Przedstawię również kilka prostych zasad inżynierii oprogramowania mających na celu usprawnienie pisania elastycznego kodu.
Zacznijmy od określenia czym jest aplikacja enterprise. Według niektórych definicji jest to oprogramowanie rozwiązujące problem biznesowy (ERM, CRM itp). Definicja według mnie jest zbyt ogólna i niewyjaśniająca znaczenia z punktu technicznego. Dla architekta \ programisty oprogramowanie enterprise powinno być kojarzone z następującymi cechami:
- Skalowalność – system powinien być przygotowany na wzrost liczby użytkowników zarówno pod względem architektonicznym(rozszerzalność kodu) jak i wydajnościowym(np. load balancing),
- Bezpieczeństwo,
- Modularność,
- Możliwość dostarczania modułów przez różnych dostawców(inna firma piszę CRM a jeszcze inna system sprzedaży),
- Jawne oddzielenie logiki od spraw technicznych(interfejs nie zna specyfiki rozwiązywanego problemu ani źródła danych),
- Wysoce skomplikowane systemy – implementowane i wdrążane przez lata,
- Systemy rozproszone.
Z pewnością do powyższych cech można jeszcze dodać wiele elementów. Uogólniając aplikacjami klasy enterprise są programy solidne, elastyczne i otwarte na wszelkie modyfikacje.
Następne pytanie brzmi, jak zaprojektować taką aplikację? Część odpowiedzi będzie znajdować sie w kolejnych postach. Popatrzmy jednak w tej chwili na wskazany problem bardziej ogólnie. Zdefiniujmy warstwy(części) na które składa się każdy system enterprise. W podejściu Rapid Application Development(RAD), promowanym przez nowoczesne środowiska programistyczne sprawa jest prosta. Pisząc prostą aplikacje np. w Visual Studio tworzymy nowe okno i dodajemy kod obsługi bezpośrednio w pliku źródłowym okna. W poważniejszych aplikacjach niezbędne okazuje się oddzielenie od siebie przynajmniej trzech warstw kodu:
-
Warstwy prezentacji,
-
Warstwy biznesowej,
-
Warstwy dostępu do danych.
Dokładny opis warstw znajdzie się w przyszłych postach – w tej chwili wyjaśnię tylko ogólnikowo. Warstwa prezentacji to wszystko to co widzimy czyli interfejs użytkownika(GUI). Warstwa biznesowa jest rdzeniem aplikacji i odpowiada za rozwiązywanie problemów dla których została stworzona aplikacja. Czasami rozdziela się warstwę biznesową dodatkowo na warstwę usług aby uniezależnić kwestie technologiczne od implementacji tej warstwy . Warstwa dostępu do danych odpowiada za fizyczny zapis danych do dowolnej bazy danych. Poniżej przedstawiam warstwy wraz z kilkoma wzorcami projektowymi które można wykorzystać:
Spora część wzorców będzie omawiana na bieżąco w przyszłych postach zatem zachęcam do czytania.
Oooo, właśnie na taką serię artykułów czekam. Prawda, że jest dużo stron po angielsku w/w tematach ale ja jako hobbysta, piszący “dla siebie” nie znam angielskiego na tyle by wszystko z tych angielskich tekstów rozumieć (może dlatego właśnie dlatego jestem hobbystą 🙂 ) Czekam z niecierpliwością na dalsze artykuły.
Temat zapowiada się ciekawie. Było by idealnie, gdyby kolejne odcinki dotyczyły wdrażania wymaginowanego ‘konkretnego systemu’.
Przebrnięcie z x lat temu przez książke Gang of Four, gdzie każdy wzorzec był wzięty z innego systemu – spowodowało u mnie dość potężny mętlik.
Planuje zobrazować omawiane zagadnienia na przykładzie systemu sprzedaży. Może nie jest to zbyt oryginalne ale za to każdy zna zasadę takiego systemu i nie będzie problemów ze zrozumieniem samego celu aplikacji.
Wszelki kod oczywiście w C#, chodź głównie będą pojawiać się diagramy klas.