あなたの問題の説明は、「これは良い、それは悪い」というあまりにも多くのblablaが、手元の問題を見てソフトウェアを作成するのではなく、作成された方法でソフトウェアを作成する理由その問題を解決する。
問題点の説明は問題解決の問題ではありません。クライアント用に作成するアプリケーションがあります。解決すべき問題です。あなたの選択肢があなたの人生を困難にするならば、それらを蹴飛ばして、何が効いているのかを使ってください。嘲笑がうまくいかない場合は、どうして迷惑でしょうか?ああ、誰かがあなたのソフトウェアは、あなたが嘲笑しない場合は吸うと言ったので?どうして?
ここではいくつかのDDDのものを拾いましたが、重要な部分が欠落しています。製品は集約ルートです。つまり、独自のリポジトリから製品を入手する必要があります。はい、それはモデルのナビゲーション機能を緩和しますが、それはEvansの本の第2部分がどのように指示しているかを厳密にリポジトリを作成する場合、あなたのためのDDDです。しかし...あなたはすべきですか?
Productに独自のリポジトリがあるが、注文からの製品にナビゲートすることができない理由に答えることができない場合は、集約ルートのレポジトリを作成しないでください。なぜそのリポジトリはありますか?それがあれば、製品が入手できるのは唯一のポイントではないでしょうか? (怠惰な読み込みでもそうではありません!)。
これは実際には必要ない(おそらく皮肉なことに、YAGNIが最大限の効果を発揮する)大量のオーバーヘッドとコードを作成します。
DDDはすべて約と考えているです。したがって、ドメインは設計を推進し、それを実践することによって、現実を表すドメインモデルを取得します。それはあなたがどこかで読んだだけなので、たくさんのコードを実装するべきだと言っているわけではありません。代わりに、ドメイン要素、集約ルーツなどを認識している場合は、これらの型の動作をどこかに配置する必要があります。ドメインクラスの内部オーダー・リポジトリー内の受注指向フェッチ・ロジックのような別のクラスにフェッチ・ロジックを置くことはできますが、厳密な意味でのリポジトリーではありません(例えば独自のローカル・キャッシュなどはありません)。それはそれほど悪くはありません、それはあなたのクライアントのために作成する必要がありますすべてについてです。
だから、まず考えてみてください。考えてみてください。そして、考えてみてください。あなたのために論理的に思われるもの。あなたが持っているオプションの長所/短所のリストを作成し、あなたに一番合ったものを選んでください。その選択肢とその理由を文書化し、その選択肢を選択したのはなぜですか?これは他のどのソースよりも保守者にとってより価値のあるものです。代替案とそれを選んだ理由を文書化し、あなたのために何がうまくいくかを調査し、あなたが選択したものを選択します。
ソフトウェア工学は、それが適切な推論 1は、そのようにするだろう、なぜとされていない他の方法でなくて、今日では単に最初に行うと、後で考えるようにファッション思えるだけのことだ、難しいことではありません。
幸運:)
ありがとうございます。 「思考」については、これが私がやっていることなので、先に進む前に意見を聞いたのです!私はこのパターンに慣れていないし、より多くの経験を持つ人からいくつかの洞察を期待しています。もう一度乾杯。 – Grokys
はい、申し訳ありません。質問の最後の段落は、実際にあなたがしていたことが本当に役に立たなかったことを理解したことを示唆しています。次回は、コードを書く前にそのプロセスを適用しようと思っています;)(おそらくあなたがどのように働いているかから離れているかもしれないので)既に書かれたコードを投げる必要はありません。 –
この回答のぞっとする部分は、私が今までに読んだことの中で最高のものでした!あまりにも多くの "あなたはこれを行う必要があります/それ"と、誰かを読むために新鮮な山の空気の呼吸は、 "あなたの解決策のために働く"と言うことです。 – Remotec