- Dobre oprogramowanie to zrozumienie domeny
Głównym celem powstawania systemów informatycznych jest automatyzacja lub usprawnienie pewnych procesów biznesowych. Żeby to osiągnąć oprogramowanie musi dokladnie wpasować się w domenę, dla której zostało zaprojektowane. W przeciwnym wypadku wprowadzi tylko zamięszanie, liczne błędy i chaos. Aby tego uniknąć, oprogramowanie powinno odzwierciedlać domenę biznesu, powinno być modelem domeny.
Dlatego pierwszym etapem prac nad projektem, jest cykl spotkań z ekspertami domeny. Ekspert domeny jest osobą, którą doskonale zna daną domenę biznesową, zdobył w niej praktyczne doświadczenie i umie przekazać swoją wiedzę innym. Zdaża się, że zamawiający system nie koniecznie jest w niej ekspertem. Jeśli cieżko o eksperta domenowego w tej organizacji, trzeba pomyśleć o zatrudnieniu tak owego z zewnątrz.
Domain-Driven Design dostarcza pewnych wskazówek odnośnie sposobu prowadzenia takich spotkań. Po pierwsze, oprocz ekspertów domenowych i analityków, powinien w nich uczestniczyć zespoł deweloperski, tak by mógł nauczyć się jak najwięcej o biznesie, dla którego system będzie tworzył. Zespól poznaje nowe pojęcia, pewne specyficzne konstrukcje, zaczyna uczyć się języka biznesu. Poprzez zadawanie pytań i analizowanie otrzymanych odpowiedzi zostaje wypracowany pewień szkic domeny podstawowej. To bardzo ważny etap projektowania systemu. Kierunek komunikacji nie jest jednostronny, od eksperta do deweloperów. Ekspert zna domenę, ale używa jej na codzien tylko w jeden specyficzny sposób. Natomiast zdolności analityczne członków zespołu pozwalają rzucić nowe, świeże spojrzenie na biznes. Zespoł jest w stanie zweryfikować koncepty pod względem implementacyjnym. W wyniku tych niezliczonych godzin poswięconych na spotkania powinien powstać model, który będzie rozwiązywał rzeczywiste problemy biznesowe.
- Dobre oprogramowanie to jeden wszechobecny język
W momencie, gdy dwa zupełnie rozbieżne światy spotykają się, by rozwiązywyc problemy, zawsze powstają problemy komunikacyjne. Eksperci domenowi bedą używać specyficznego, bardzo specjalizowanego słownictwa, by wyrazić biznes. Natomiast z drugiej strony, osoby techniczne bedą używały żargonu technicznego. Projekt stanie przed dużym wyzwaniem, jezeli nie uda się wprowadzić wspólnego jeżyka, zrozumiałego dla obu stron. Komunikacja bedzie ograniczona koniecznością ciągłego tłumaczenie specjalistycznych terminów i pojęć. Który język powinien zostać użyty w modelu? Główna zasada Domain-Driven Design mówi, model powinien zostać opisany za pomocą języka specyficznego dla biznesu. Jako, że chcemy by nasze oprogramowanie bylo jak najblizej modelu jak to mozliwe, to i wspolny jezyk powinien byc przeniknięty biznesem. Kazdy z czlonkow zespolu powininen dbac o to, by uzywać języka modelu, zwnego tutaj Ubiquitous Language. To nie jest tak, ze wspolny jezyk powstaje z dnia na dzien. Wymaga to duzo wspołpracy pomiedzy zespołem deweloperskim a ekspertami domenowymi. Celem powinno byc stworzenie modelu i jezyka scisle zwiazanego z domena biznesowa. Jesli model i jezyk jest w pelni zrozumialy przez ekspertów domenowych i poprawny z punktu widzenia architektury systemu i implementacji, to jest to dobry model.
- Dobre oprogramowanie to model w kodzie źródłowym
Model moze zostac wyrazony za pomocą diagramu, kodu źródłowego czy opisu w języku naturlanym. Co wybrac? Jak wyraźić esencję problemu, tak by każda osoba zaangażowana później w projekt była w stanie ją zrozumieć? Jak zapewnić, żeby model nie rozsynchronizował się z biznesem na żadnym etapie tworzenia oprogramowania? Najlepiej by model został odrazu wyrażony w kodzie źródłowym, ponieważ to przy pomocy kodu robimy różnicę dla klienta. Kod powinien byc tak skonstruowany pakiety, klasy, metody, nazwy zmiennych by nie tylko komunikował nam co robi ale i dlaczego to robi. Powinien za to ukrywac przed nami w jaki sposób to robi. Należy pamietać, ze kod który działa, nie koniecznie dobrze komunikuje swoje zamiary. Z tego powodu, stworzenie dobrego modelu w kodzie jest zadaniem bardzo, bardzo trudnym.
Czy nie mozna uzyc do tego notacji UML? UML nadaje sie do wyrazania klas, atrybutów i relacji pomiedzy klasami, ale slabo sprawdza sie w modelowaniu zachowania klas i warunków biznesowych. Po drugie, nie tłumaczy wyborów architektonicznych. Poza tym projekt w UML bardzo szybko się starzeje i dezaktualizuje. Z tego samego powodu, wynikiem „crunching knowledge”, czyli kruszenia wiedzy pomiedzy ekspertem domenowym a deweloperami, nie powinny byc zadne dokumenty, opisy i specyfikacji. Powinien pozostać działajacy kod.
- Dobre oprogramowanie to model w pakietach
W dużych i bardziej złożonych aplikacjach model domeny rozrasta się do takich rozmiarów, że nie jest zrozumiały jako całość. Pojawia się potrzeba wprowadzenia w domenie kolejnej warstwy abstrakcji, która pomoże łatwiej zrozumieć koncept domeny. Patrząc na moduły jakie zawiera model, na powiązania pomiędzy nimi, łatwiej pojąć domenę jako całość. Dopiero jeśli potrzebujemy poznać szczegóły konkretnej części domeny zagłębiamy się wewnątrz modułu.
Drugim argumentem za używaniem modułów jest posiadanie kodu, który jest bardziej spójny i mniej powiązany pomiędzy sobą. Moduły powinny zawierać kod który jest ze sobą powiązany funkcjonlanie oraz dostarczać interfejsu, w którym zamknięte są wszystkie powiązania z innymi modułami. Nazwa modułu powinna opisywac historię, którą realizuje moduł i powinna wywodzić sie ze wspólnego języka.