7

相互作用する必要がある 3 つのエンティティがあります: UserSupportTicketおよびPhoneConversation。誰かが助けを求めて電話をかけると、ユーザーには SupportTicket が割り当てられ、電話を説明する Ticked に PhoneConversation が割り当てられている必要があります。

私の質問は次CreatePhoneSupportTicket()のとおりです。新しい SupportTicket と PhoneConversation を作成し、それらを相互に関連付け、最後に SupportTicket をユーザーに関連付けるメソッドをどのエンティティに配置する必要がありますか?

SRPに違反するため、ユーザーにはできないと思います(ユーザーはさらにいくつかのことを行います)。ただし、メソッド自体は複数のことを行うため、SupportTicketPhoneConversation の両方を作成する必要があります。これは、サービスがエンティティにメソッドを配置するよりも優れたソリューションである場合の状況ですか? ご協力いただきありがとうございます!

4

5 に答える 5

5

ロジックの残りの部分に適合する場合は、new演算子を使用しても問題はありません。SupportTicketの種類が1つしかない場合は、を使用new SupportTicket(currentUser)して作成します。または、依存関係が逆の場合は、CreateSupportTicket()Userにメソッドを追加し、new SupportTicket()そこで呼び出します。SupportTicketコンストラクターは、を作成できますnew PhoneConversation()。後で何らかのファクトリを使用する必要があると判断した場合は、いつでもコードをリファクタリングできます。しかしそれまでは、想像できる最も簡単な解決策を探してください。

于 2010-06-08T19:26:07.427 に答える
2

Factory を使用してサポート チケットを作成することをお勧めします。サポート チケットの作成により、その中で電話による会話がインスタンス化されます。

于 2011-01-19T16:15:37.943 に答える
2

この場合、このメソッドをドメイン サービスに配置することをお勧めします

では…ドメインサービスとは…何?エンティティと値オブジェクトがドメイン内の「もの」である場合、サービスはアクション、操作、およびアクティビティを処理する方法です。エンティティにロジックを直接配置するべきではないか? はい、そうすべきです。エンティティとその子に関連するロジックを使用して、エンティティをモデル化する必要があります。しかし、そのロジックがエンティティに適合しない場合や、エンティティが肥大化して扱いにくくなる場合があります。それがサービスの出番です。それらは、複数のエンティティを処理する、または複雑な操作や外部の責任を処理するロジックを、タスクにより適した別の構造に分割するのに役立ちます。構造は、タスクにより適しています。

ドメイン駆動設計のステップ バイ ステップ (無料の電子書籍)ページ #19から

于 2010-07-08T01:31:47.877 に答える
0

一部のエンティティがこのようなメソッドをサポートすることは理にかなっているかもしれませんが、舞台裏でサービスを呼び出すことを妨げるものは何もありません。

この場合、分析 (おそらく既に行っていること) は、私たちが何をいつ知っているかを確認するためのもののようです。たとえば、電話がかかってくるので、おそらく発信者 ID を使用してユーザーを識別できます。以前に彼を見たことがある場合は、ロードしてください。そうでない場合は、新しいものを作成します。どちらの場合も、ユーザーから始めます。

同時に、これは新しい呼び出しなので、おそらくファクトリで作成しますか?

既存のユーザーの場合、これは既存のチケットの継続ですか? もしそうなら、それを見つけてこの呼び出しを追加してください。次のようなことをすると便利かもしれません

Ticket t = user.GetOpenTicket();
t.AddCall(currentCall);

なんでもいい。しかし、Ticket.AddCall と user.GetOpenTicket をサービスに呼び出して面倒な作業を行うのがおそらく最も理にかなっています。

于 2010-06-08T19:13:41.233 に答える
-2

あなたのドメインに関する詳細な知識がなければ何とも言えませんが、持っていることは理にかなっていますか?aSupportTicketRepository.CreatePhoneSupportTicket(aUser, aPhoneConversation)

于 2010-06-08T19:12:49.123 に答える