2010-04-04 4 views
5

Szukam opinii na temat mojej architektury aplikacji CMS opartej na MVC ASP.NET.ASP.NET MVC architektura aplikacji "wytyczne"

Model domeny - zależy wyłącznie od klas Systemowych, aby zdefiniować typy. Na razie głównie anemiczny.

Repository Warstwa - wydobywane dostępu do danych, tylko nazywa się przez warstwę usług

Usługi layer - wykonuje logikę biznesową na model domeny. Odsłania modele widoków do kontrolerów.

ViewModelMapper - usługa, która przekłada się tam iz powrotem między widokami modeli i model domeny

Kontrolery - Super cienki „drogówki” funkcjonalność styl, który współdziała z warstwą usług i tylko rozmów w warunkach widzenia modeli, nie model domeny

Mój model domeny jest najczęściej używany jako obiekt przesyłania danych (DTO) i ma obecnie minimalną logikę. Zauważyłem, że jest to miłe, ponieważ zależy od niczego (nawet klas w warstwie usług).

Warstwa usług jest nieco trudna ... Chcę tylko, aby kontrolery miały dostęp do podglądów w celu ułatwienia programowania GUI. Jednak niektóre usługi muszą ze sobą rozmawiać. Na przykład mam usługę zdarzeń, która powiadamia inne usługi programu nasłuchującego, gdy treść jest oznaczana tagami, kiedy tworzone są posty na blogu itd. Obecnie metody, które pobierają modele domen jako dane wejściowe lub zwracają, są oznaczone jako wewnętrzne, więc nie mogą być używane przez kontrolerzy.

Brzmi jak przesada? Za mało abstrakcji? Robię to głównie jako ćwiczenie w byciu surowym o architekturze, a nie o rzeczywisty produkt, więc proszę nie odpowiadać na pytania w kategoriach "prawo zależy od tego, co chcesz robić".

dziękuję!

+1

To, że udało ci się tak wiele wyrazić w tak niewielu słowach, powinno dać ci wskazówkę, że jesteś na dobrej drodze. – pdr

Odpowiedz

2

Ogólnie rzecz biorąc, projekt wygląda dobrze.

Istnieje kilka więcej rzeczy mogę zrobić:

  • Walidacje - posiadają walidację 2 krok -
    Krok 1: Klasy poziomu domeny egzekwować własnej ważności (za pomocą atrybutów lub jakiegokolwiek innego mechanizmu).
    Etap 2: repozytorium zapewnia, że ​​obiekt jest ważny w związku z repozytorium

  • Zależność Injection - użyć ramy DI wstrzykiwania zależności. Przyda się do testowania jednostkowego. Ponadto, jeśli warstwa serwis gdzie trzeba zadzwonić całej usługi, sprawdź czy ten artykuł na Łącznej Serwisu jest przydatne: http://blog.ploeh.dk/2010/02/02/RefactoringToAggregateServices.aspx

    • ViewModels - może być kuszące do ponownego wykorzystania, ale czekać & zegarek zanim ostatecznie zdecydujesz

HTH.

+0

Dobra odpowiedź. W dawnych czasach nazywaliśmy Krok 1 "Sprawdzanie poprawności" i Krok 2 "Weryfikacja". – pdr

+0

Dzięki Sunny.W rzeczywistości używam StructureMap dla DI, więc jestem tam dobry. Obecnie do sprawdzania poprawności używam usługi sprawdzania poprawności, która sprawdza poprawność modeli domeny. Podoba mi się to, że modele uniemożliwiają uzyskanie nieprawidłowego stanu i myślę, że wolę mieć reguły biznesowe typu "prawidłowy stan" wbudowane w modele domen. Gdzie narysujesz linię pomiędzy regułami, które pasują do modelu domeny i gdzie indziej (usługa walidacji, repozytoria, itp.)? –

+0

Aby zachować mój model domeny w poprawnym stanie, nie ustawiam żadnych ustawień właściwości w moim modelu. Zamiast tego, wszystkie zmiany stanu muszą przejść przez metodę, która sprawdza, czy zmiana jest odpowiednia przed jej zastosowaniem. Minusem jest to, że jeśli masz wiele potencjalnych zmian, może to oznaczać sporo kodu. Operacje tworzenia i usuwania nadal trafiają na warstwę repozytorium. – Ryan