All we do is looking for some way to fulfill our needs.

wtorek, 15 lutego 2011

Tagged under:

Naturalny porządek refaktoryzacji - idea rysunkowa

2 komentarze:

Sławek Sobótka pisze...

Dobra wizualizacja.
Zwrócił bym tylko uwagę, na to, że w *niemałym* projekcie warto rozróżnić warstwy od mvc.
MVC mieszka sobie w warstwie prezentacji jako wzorzec organizowania właśnie prezentacji. Kontroler nie powinien zawierać logiki aplikacyjnej a jedynie logikę związaną z jakąś konkretną technologią prezentacji (nawigacja, ew. specyficzne komunikaty dla konkretnej technologii widoku).

Natomiast w warstwach poniżej możemy sobie ułożyć kolejno:
- logikę aplikacji (serwisy opisujące kroki use case)
- logikę biznesową (model domeny)
- infrastrukturę (dostęp do danych, serwisy techniczne)

Dzięki temu można dowolnie zmieniać technologię prezentacji - np na nasze serwisy aplikacyjne nałożyć web serwisy, remoting, androida idp...
Jest to oczywiście mało prawdopodobne, ale przekonywujący powinien być fakt, że taką logikę aplikacji niezbrukaną konkretną technologią prezentacji (czego nie unikniemy w kontrolerach) można po prostu łatwiej testować.

Kolejna uwaga, to: M z mvc to nie musi być to samo co model domenowy w *niemałych* aplikacjach. Zwykle model domenowy to jedna rzecz, a to co chcemy wyświetlić w danym use case na ekranie to inksza inkszość. Do tego mając rich model (do czego doprowadzi refaktoring) dojdziemy do pewnej niezręczności: dostęp do metod biznesowych na widoku.
Taki model domenowy może być też obarczony np pośrednikami JPA. Przesłanie go do zdalnego klienta to porażka.

Sławek Sobótka pisze...

Zapomniałem dodać, że pisząc o modelu domeny w warstwie logiki biznesowej (nie aplikacyjnej) miałem na myśli w szczególności Rich Domain Model (np taki z DDD, złożony z 7 różnych klocków, nie tylko encji).

Nie chodzi bynajmniej o to aby odzierać model z logikę biznesowej i przenosić do do warstwy logiki aplikacyjnej.

Aczkolwiek istnieją inne podejście, gdzie mamy jedną warstwę logiki (serwisy) oraz anemiczny model encji.