Cześć,
chciałbym poznać Wasze zdanie na temat tego, czy stosowanie obiektów domenowych (widocznych dla wszystkich warstw aplikacji) jest dobrą metodyką? Bardzo ułatwiają one komunikację między warstwami ale jednocześnie ujmują z elastyczności, gdyż interfejsy/abstrakcje poszczególnych warstw są jawnie związane z obiektem domenowym.
Może przedstawię przykład. Oprę to na znowu na bibliotece. Problem: wypożyczanie książki o zadanym ID.
- podejście bez DDD - zwykłą aplikacja trójwarstwowa:
- użytkownik podaje ID i żąda wypożyczenia
- warstwa widoku przekazuje wywołuje metodę "Wypożycz" warstwy logiki
- warstwa logiki, sprawdza, czy istnieje książka w bazie, sprawdza czy nie jest ona już wypożyczona
- podczas powyższych procedur warstwa logiki wszystkie swoje zadania kieruje do warstwy danych, która zwraca czy książka istnieje lub czy jest wypożyczona
- warstwa logiki - ponieważ ma dostęp do warstwy danych korzysta z udostępnionych przez inią interfejsów dzięki temu na koniec swoich działań dostała jakiś obiekt IKsiążka
- niestety warstwa widoku nie wie co to IKsiązka, więc zanim z warstwy logiki IKsiążka trafi do widoku, warstwa logiki musi przerobić IKsiazka na to, co oferuje widok (np kolejno WystwietlTytul, WyswietlAutora itp)
- Podejście z DDD
- mniej więcej tak jak powyżej, przy czym implementacja IKsiązka jest dostępna w domenie (jej implementacje są tworzone np za pomocą jakiejś tam fabryki - mniejsza o to).
- ukracając - warstwa logiki po otrzymaniu zadania od widoku, robi wszystko tak jak poprzednio, ale otrzymany obiekt IKsiązka przekazuje od razu do widoku, gdyż obiekt ten jest widoczny w całej domenie.
- widok z otrzymanego obiektu IKsiazka wywoła sobie PokazTytul() i wyświetla użytkownikowi.
Które podejście kiedy stosować? A może sami stosujecie zawsze tylko jedno z nich?