Tym przewrotnym tytułem chcę dziś zwrócić uwagę na dwa ważne i bardzo pomocne wzorce analityczne (słowo analityczne ode mnie, w książkach na temat wzorców bardzo rzadko używana jest nazwa “wzorce analityczne”) opisane w książce M.Fowlera. Wzorcami analitycznymi nazywam te wzorce projektowe, które pomagają w analizie i projektowaniu modelu dziedziny systemu (biznesowy model obiektowy).

MFowlerWzorceProjektowePolecam oczywiście lekturę całej książki Martina Fowlera Architektura Systemów Zarządzania Przedsiębiorstwem Wzorce Projektowe.

 

Mamy model czegoś co ma się wydarzyć. Na tym etapie kompletnie nie ma sensu zajmowanie się tym ile znaków ma nazwisko. To może się zmienić w toku analizy a nawet implementacji, ale nie powinna ulec zmianie logika tej operacji.

Jak już opanujemy logikę (zrozumiemy co i jak ma działać i zaprojektujemy jak to zrealizować) zabieramy się za szczegóły. Model dziedziny (fragment):

Model dziedziny

Jak widać, np. danePasażera jako zawartość to daneOsoby a nie “pola i typy danych”. Czym są DaneOsoby znajdziemy tu:

ValueObject

Zamiast prostych typów danych (np. znakowe) stosujemy obiekt jako typ danych. To znakomicie ułatwia późniejsze rozszerzenia i zmiany (nie musimy nic zmieniać w modelu dziedziny by np. dodać drugie imię do danych osoby, modyfikujemy w jednym miejscu jedynie deklarację klasy DaneOsoby).

Wywołanie operacji podajDaneBiletu zwraca obiekt DaneBiletuLitniczego (lub agregat zawierający wszystkie bilety):

Transfer ObjectNie jest to ten sam obiekt co wcześniej, ValueObject to typ danych, Transfer Object to serializacja, której celem jest jedynie przeniesienie w możliwie najprostszy do odczytania sposób określonych informacji (oba te obiekty nie mają jednak tożsamości). Nie należy tych wzorców mylić ani utożsamiać, gdyż Value Object to “typ danych” zaś Transfer Object to jedynie parametr wywołań, Value Object powinien mieć operacje sparwdzajace jego poprawność (walidacja), Transfer Object służy wyłącznie do przekazywania informacji jako parametr wywołań i odpowiedzi (w pewnym sensie  definiuje protokół wymiany danych).

Korzyści ze stosowania tych wzorców to między innymi:

  1. szczegóły danych odkładamy na koniec projektu co jest bezpieczne (nie musimy modyfikować projektu w miarę postępu pozyskiwania wiedzy o szczegółach),
  2. zmiana tych szczegółów nie spowoduje potrzeby zmiany szkieletu modelu dziedziny,
  3. możemy prowadzić spokojną uporządkowaną analizę “top-down” (od ogółu do szczegółu),
  4. możemy się umówić z developerem, że jako analitycy nie będziemy wnikali w szczegóły danych, nadal możemy operować klasami ValueObject i TransferObject (klasy te będą w początkowej fazie projektu bez atrybutów),
  5. mimo to możemy umieścić w klasach ValueObject warunki walidacji (operacje klas, których tu nie pokazywałem) i do tego one między innymi służą (to się nazywa określanie wymagań poprzez testy czyli TDD),
  6. już na samym początku możemy uzgodnić postać danych wymienianych na interfejsach (np. zdalna komunikacja) i korzystać z tej umowy.

Tak zaprojektowany system spełnia także jedną z kluczowych zasad projektowania obiektowego: “system jest zamknięty na zmiany i otwarty na rozszerzenia”.

 

Na zakończenie

Często słyszę, że to trudne i pracochłonne (dodatkowe klasy w modelu), niestety zbyt prosty projekt potrafi być kosztowniejszy w rozbudowie w porównaniu z pierwotnym wytworzeniem, dlatego jak klient w ramach wymagań wpisuje  (a wpisuje coraz częściej): system ma umożliwiać łatwe rozszerzenia funkcjonalności, to należy go tak projektować, w przeciwnym wypadku wymaganie to nie jest spełnione…

Druga uwaga: często sami klienci zabijają swoje projekty żądając na samym początku udokumentowania wszystkich szczegółów jakie im do głowy przyjdą nie potrafiąc jednocześnie opisać mechanizmu działania ich organizacji (lub nowego pomysłu). To niestety często spotykane zjawisko, z którym moim zdaniem należy walczyć. Paradoksalnie złożoność systemów biznesowych tkwi w mechanizmie ich funkcjonowania a nie w danych, które zbierają (których nie raz jest po prostu za dużo…).

Dane to fakty jakie chcemy znać, te fakty są konsekwencją działania a nie odwrotnie. 

Na rynku w Polsce są jeszcze między innymi książki o wzorcach:

Jarosław Żeliński

Jarosław Żeliński: autor, badacz i praktyk analizy systemowej organizacji: Od roku 1991 roku, nieprzerwanie, realizuje projekty z zakresu analiz i projektowania systemów, dla urzędów, firm i organizacji. Od 1998 roku prowadzi samodzielne studia i prace badawcze z obszaru analizy systemowej i modelowania (modele jako przedmiot badań: ORCID). Od 2005 roku, jako nieetatowy wykładowca akademicki, prowadzi wykłady i laboratoria (ontologie i modelowanie systemów informacyjnych, aktualnie w Wyższej Szkole Informatyki Stosowanej i Zarządzania pod auspicjami Polskiej Akademii Nauk w Warszawie.) Oświadczenia: moje badania i publikacje nie mają finansowania z zewnątrz, jako ich autor deklaruję brak konfliktu interesów. Prawa autorskie: Zgodnie z art. 25 ust. 1 pkt. 1) lit. b) ustawy o prawie autorskim i prawach pokrewnych zastrzegam, że dalsze rozpowszechnianie artykułów publikowanych w niniejszym serwisie jest zabronione bez indywidualnej zgody autora (patrz Polityki Strony).