私が注文 クラスは オーダーライン用aggreagrteルートであるべきと思った程度 集約ルートの概念を知覚できるものから。
はい、OrderLineは親注文の外で意味をなさないため、Orderルートの下にある可能性が高いです。
私は(新しいオーダーラインをハードコーディングします)私のUI /サービスクラスの 声明
おそらくない、これはそれが頻繁に発生し、動作するように作られている方法ですが。問題は、私が見ているように、オブジェクトの構築が異なるコンテキストで行われることが多く、検証の制約はそのコンテキストによって異なります。
私はのproductID、Orderクラスでの数量など のような のパラメータを持つメソッドを定義する必要がありますか?
のように:これはそれを行うための一つの方法である
public OrderLine AddOrderLine(Product product, int Quantity ...)
。注意ProductIdの代わりにProductクラスを使用しました。場合によっては、一方が他方よりも好ましい場合があります。私はいろいろな理由で両方を使用していることがわかります。IDを持っていて、集約ルートを取得する正当な理由がない場合があります。操作を検証するために別のルートが必要になることがあります。
これを行うもう1つの方法は、子ども用のカスタムコレクションを実装することです。
だから私は持っている:
order.OrderLines.Add(product, quantity);
エンティティのルートは、それが混乱を避け、多くの子のコレクションを持っている場合、これはもう少し自然やOO、特に感じています。
order.AddOrderLine()
、order.AddXXX()
、order.AddYYY()
、order.AddZZZ()
対
order.OrderLines.Add()
、order.ZZZs.Add()
、またorder.YYYs.Add()
、私はUI から ハードコードされたインスタンスを削除する場合またはDIを使用してOrderクラスを作成します。これには何が最も良い方法は でしょうか?
これは、Factoryパターンのテキストブックケースです。そのようなファクトリを自分のカスタムコレクションに挿入して、Add()
メソッドのインスタンス化をサポートします。
オーダーは考えていません。オーダーラインは追加です。カプセル化と呼ばれるOOのことがあります。あなたのクラスに多くのXXX、ZZZ、YYYがあるなら、それを再設計するほうが良い(良いオブジェクト指向設計は多くの小さなオブジェクトを持つ傾向がある)。あなたは、コレクションをカプセル化し、列車の難破(流暢なインターフェイスは別のケースです)を避ける利点については、Googleをすることができます。 –