0

ドメイン駆動設計の基礎を理解しようとしています。昨日、私が取り組んでいるプロジェクトで、リポジトリがエンティティのリストを返したコードを見つけました。ここで、DDD のリポジトリについて読むと、リポジトリが集約ルートを返す必要があること、および集約に対するアクションは集約ルートのメソッドを呼び出して実行する必要があることがかなり具体的です。

リストを独自のクラスに配置して、そのクラスを返すだけです。ただし、私のプロジェクトでは、メッセージを表示するか、新しいメッセージを追加するか、既存のメッセージを削除するだけなので、DDD への準拠を除いて、基本的にそれを行う必要はありません。すべてのメッセージを削除する必要はないので、メソッドはaddMessage(...)getMessages()updateMessage(...)およびのみremoveMessage(...) です。これは、基本的にドメイン サービスが行っていることです。

アイデアはありますか?Aggregate と Repositories を記述する際の DDD のベスト プラクティスは何ですか?

4

1 に答える 1

0

DDD を初めて使用する人にとって紛らわしい側面の 1 つは、リポジトリの概念です。リポジトリ: ドメイン オブジェクトにアクセスするためのコレクションのようなインターフェイスを使用して、ドメインとデータ マッピング レイヤーの間を仲介します。

リポジトリは、集約ルートへの参照を取得する機能を提供します。エンティティ、値オブジェクトではなく、集約ルート (「リポジトリは集約ルートを返す必要がある」には同意しません)。

提案: - 集約ルートごとに 1 つのリポジトリ

  • リポジトリ インターフェイス (IMessageRepository など) はドメイン モデルに存在します。
public interface IMessageRepository()
{
     void saveMessage(Message msg);
     void removeMessage(Message msg);
     Ilist<Messages> getMessages();
}
  • リポジトリの実装 (nhibernate を使用している場合は NHibernateMessageRepository など) は、ドメインの外部に存在します。

この助けを願っています!!

于 2011-02-03T11:49:40.897 に答える