私はDDDから始めています。DDD アプリケーションに含まれる複数のレイヤー間の相互作用について少し混乱しています。
プレゼンテーション層からリポジトリを呼び出すことはできますか? そうでない場合、サービス層のリポジトリによって提供される CRUD 機能を複製する必要がありますか (もちろん、これらの機能にリポジトリを使用します)。これを行う最良の方法は何ですか?
私はDDDから始めています。DDD アプリケーションに含まれる複数のレイヤー間の相互作用について少し混乱しています。
プレゼンテーション層からリポジトリを呼び出すことはできますか? そうでない場合、サービス層のリポジトリによって提供される CRUD 機能を複製する必要がありますか (もちろん、これらの機能にリポジトリを使用します)。これを行う最良の方法は何ですか?
プレゼンテーション層とは正確には何を意味しますか? コントローラー/プレゼンターを意味する場合は、まったく問題ありません。私が使用した経験則は、コントローラー アクションが 4 行以上のコードである場合、アプリケーション サービス クラスへのリファクタリングを検討する必要がありますが、それでも - どちらもアプリケーション レベルであり、そこでリポジトリを使用できることは確かです。
あなたの質問の言い回しは、私がこれを誤解している可能性がありますが、ビューまたは分離コードからリポジトリを参照することを考えているように疑わしいように聞こえました。その場合、私はノーと言うでしょう!いいえ!いいえ!
もちろん、プレゼンテーション レイヤーからリポジトリを呼び出すこともできます。私のアドバイスの 1 つは、プレゼンテーション層を実装ではなくリポジトリの抽象化に依存させることです。つまり、UserSession は PersonRepository クラスではなく IPersonRepository インターフェイスに依存します。関心が適切に分離されるだけでなく、テストが容易になります。
頑張れ!
私は通常サービス層を使用しますが、リポジトリを使用しても害はありません
ケビンが言うように、コントローラーまたはプレゼンターを使用すると、多くの利点が得られます。
これには、懸念事項の明確な分離とテスト容易性が含まれます。
個人的には、ASP.NET 設定では、«パッシブ ビュー» Fowlerを使用します。
Web フォームとして具体的な実装を持つインターフェイスとしてページ コントラクトを設計するだけで、プレゼンターをテストするときにそれらをスタブ/モックするだけです。
頭に浮かぶ唯一の欠点は、「従来の」Web フォーム ソリューションよりも多くのコードが必要になることです。