Obiekty domenowe a warstwy aplikacji - dyskusja

0

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.

  1. 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)
  1. 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?

0

Pytałem już m.in. o to tutaj: http://4programmers.net/Forum/viewtopic.php?id=165015
Tylko tak ładnie tego nie opisałem.

0

Zajrzałem do tematu, który podałeś - sprawa jest podobna przy czym - moim zdaniem - udostępnienie obiektów encji (dokładnie tych mapowanych z ORM) to wg mnie bardziej skłania się do wzorca Active Record, gdyż jest obiekty są silnie związane ze strukturą bazy danych - mam tu na myśli np związanie Książki z wypożyczeniami - operujesz na 2 implementacjach encji: IKsiążka i IWypożyczenia. I w wypożyczeniach sprawdzasz czy książka jest wypożyczona. Model domenowy posiada tę różnicę, że obiekt domenowy jest niezależny od struktury danych, wiec w tym przypadku implementacje IKsiażka będą miały po prostu pole bool IsWypozyczony - jego wypełnieniem zajmuje się warstwa danych niezależnie czy z Tabeli wypożyczenia czy pobierze tą wartość z pliku itp. Zmiana struktury/źródła danych nie wpływa na zmianę struktury obiektu domenowego.

Nadal jednak pozostaje pytanie zarówno w Twoim jak i moim przypadku o zasięg widoczności takich obiektów.

PS.
Konwencja nazewnictwa w poście jest wzięta z kosmosu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1