チケットと顧客を管理するアプリケーションがあります。顧客は多数のチケットを所有しています。顧客が削除されると、そのチケットも削除されます。これは、オブジェクトが集合体であるかどうかを確認するためのテストの 1 つです。私は、それらが両方とも集約ルートの下にないエンティティであることを選択しました。通常、多くの顧客にまたがるチケットのリストを読み込んで表示します。SQL Server を使用してデータをリレーショナル形式で保存しています。
私のアーキテクチャは次のとおりです。
- ASP.NET MVC アプリケーション。
- WCF サービス (ファサード)。このサービスには、GetTicket、GetTickets、GetCustomer、GetCustomers などのパブリック メソッドがあります。これには、リポジトリを直接使用します。また、Run というパブリック メソッドもあります。Run は、AssignTicket、ChangeTicketName などのコマンドを受け入れます。コマンドを処理するために、サービス、ITicketService および ICustomerService がファサードに挿入されます。これらのサービスのメソッドは、ファサードからコマンドを実行するために使用されます。サービスは、ITicketRepository と ICustomerRepository を使用してデータを読み込みます。
- 関係 SQL Server データベース
Tickets から Customers への参照を維持することに夢中になっています。関係的に、チケットには Customers テーブルにマップされる FK があります。UI が個々のチケットを表示すると、Facade.GetTicket(id) と Facade.GetCustomers() が呼び出されます。すべてのチケットの詳細とそれが属する顧客の名前を表示できます。それはすべて元気でダンディです。しかし、多くの異なる顧客が所有する大量のチケットのリストはどうでしょうか。Ticket は、顧客を参照する Guid のみを保持することに注意してください。UI にリストするチケットごとに顧客の名前を取得するためにファサードを呼び出す必要はありません。チケットに CustomerInfo( CustomerId および CustomerName ) という値オブジェクトを含めることは有効ですか? SQL ステートメントを使用してこのデータを結合することは有効ですか? もし私がいなかったら?リレーショナルデータベースを使用していますか? 顧客の名前が変更された場合はどうなりますか? システムでは、チケットは実際には他の複数のエンティティへの参照も保持しています。
DDD のビジネス ロジックと、UI が表示する必要があるものに断絶があるようです。