więc nie byłoby możliwe przejście na inną ORM (nie to, że chcieliśmy)).
To wydaje się złe. Główną zaletą wzorca repozytorium jest ukrywanie logiki dostępu do danych i łatwość wymiany.
Jak dotąd wydaje mi się, że umieszczam logikę biznesową w moim modelu domeny i za pośrednictwem repozytoriów współpracuję z ORM (który kiedykolwiek wybrałem). Jeśli jednak chciałbym nadal korzystać z narzędzia MDA dla części ORM aplikacji, utworzony tutaj model byłby bardzo anemiczny (tj. Nie zawierałby żadnej logiki biznesowej). Podobnie, jeśli użyłem frameworku Entity (.net) lub NHibernate dla mojej ORM, byłby to również model anemiczny. Nie jestem pewien, gdzie postawisz logikę biznesową, gdybym tylko użył NHibernate.
Anemiczny model domeny jest uważany przez wielu za złą praktykę, na przykład Martin Fowler. Należy unikać takiego projektu, ponieważ taki model prowadzi raczej do procedur projektowania proceduralnego niż do dobrego projektowania obiektowego. Następnie masz klasy danych i klasy menedżera / przetwarzania, co oznacza, że rozdzieliłeś stan i zachowanie. Ale przedmiotem naprawdę powinien być „stan i zachowanie”.
NHibernate wykonuje świetną robotę w uporczywej ignorancji. Możesz ukryć szczegóły mapowania w XML lub w FluentNHibernate i po prostu napisać zwykłe POCO. Stworzenie bogatego modelu domeny za pomocą NHibernate jest bardzo łatwe. Myślę, że możesz to zrobić za pomocą frameworku encji i narzędzia MDA. Tak długo, jak to narzędzie tworzy częściowe klasy, można dość łatwo rozszerzyć wygenerowany kod bez obawy, że nowa generacja może zniszczyć kod napisany przez użytkownika.
Krótko mówiąc, ta długa historia. Kiedy używasz NHibernate, nic, powtarzam nic , nie powstrzymuje cię przed przyjęciem bogatego modelu domeny. Polecam używać go z FluentNHibernate i mapowania ręcznie. Kod mapowania zajmuje tylko 5–10 minut. Przypuszczam, że to samo dotyczy frameworku encji i że jego narzędzia przynajmniej tworzą klasy cząstkowe, które można łatwo rozszerzyć.
Czy mam rację, myśląc w ten sposób, innymi słowy w DDD całą logikę biznesową w domenie i po prostu używam ORM do utrwalania za pośrednictwem repozytoriów?
W większości masz rację. Powinieneś mieć bogaty model domeny. Zwłaszcza, gdy sprawy stają się coraz bardziej złożone, łatwiej jest je utrzymać i rozszerzyć, jeśli odpowiednio je zaprojektujesz. Pamiętaj jednak, że DDD zna również (Warstwa Domeny i Warstwa Aplikacji) Usługi do implementacji logiki biznesowej oraz Fabryki do enkapsulacji logiki kreacyjnej.
Staram się również różnicować logikę biznesową na logikę domeny i logikę biznesową aplikacji. Logika domeny to sposób, w jaki domena współdziała i zachowuje się, podczas gdy logika aplikacji, która jest zupełnie inną warstwą, opisuje, w jaki sposób domena jest używana dla konkretnego przypadku użycia / aplikacji. Często muszę aktualizować model domeny, aby obsługiwał określone przypadki użycia i aby był bardziej wydajny.