私はまだdddに頭を悩ませているので、これが意味をなさない場合は許してください。私が持っているとしましょう
public class Customer{
public IList<Order> Orders{get;set;} // should be encapsulated i know
}
public class Order{
private Customer _readOnlyCustomer;
public virtual Customer ReadOnlyCustomer { get { return _readOnlyCustomer; } }
// possibly
public virtual void SetCustomer(Customer customer) {_readOnlyCustomer = customer}
}
最初に私はプライベートreadonlyCustomerビジネスを行っています。これは、ある集約ルートが別の集約ルートを変更してはならないことを理解しているためです。これを流暢なマッピングの問題に直接強制することはできませんが、少なくとも警告するような名前を付けることができます。変更できないこと。マッピングでフィールドを読み取り専用にすることもできますが、これは実際にこれを強制しますが、次の質問では問題になる可能性があり、顧客側でこれを強制する方法がわかりません。 customer.ordersコレクションを変更します。この問題についての考えは歓迎されます。しかし、私の本当の質問はです。
新しい注文を作成する場合。注文に顧客を設定して保存し、Customer.Ordersコレクションをnhibernateで更新するのは理にかなっていますか、または顧客をCustomer.Ordersコレクションに設定して注文を追加してから顧客を保存する必要があります。
私がこれを書いているとき、私がそれを行っていた方法は、子で親を参照せず、親のコレクションを更新することでした。これは、NHでdb呼び出しの利点があり、節約の処理が容易になると思いますが、トラバースが困難になります。オブジェクトをAgルートまたはエンティティとして見ているので、コレクションとインスタンスの間に双方向の関係を持つことがAgルートのトラバーサルと自律に役立つことがわかります。
どちらの使い方をするか、そして/または私が物事を正しく見ているかどうかを理解するのを手伝ってください。ありがとう、ライフ