ビジネスロジックをコントローラーから遠ざけるのは常識です。ここで説明するように、リポジトリ パターンを使用して、データベース アクセス ロジックをリポジトリに配置することも常識です:リポジトリ パターン
ただし、リポジトリ パターンでは、非常に単純な低レベルのデータベース操作 (挿入、削除、更新、選択) のみが指定されています。検証ロジックも除外することをお勧めします。ほとんどの検証はモデル オブジェクト自体の内部に配置できるため、これは問題ではありません。問題は、ある種の相互検証、つまり、同じモデル オブジェクトの複数のインスタンスを調べる必要がある検証を行う必要がある場合に発生します (たとえば、同じオブジェクトのすべてのインスタンスで名前が一意であることを確認するなど)。 ) またはさらに悪いことに、検証ロジックが異なるタイプの 2 つ以上のオブジェクトをチェックする必要がある場合。この場合、非常に大きな穴があります。ビジネス ロジックをコントローラーに配置したり、リポジトリに配置したり、オブジェクト モデル自体に配置したりすることはできません (ロジックはオブジェクトのプロパティだけにバインドされているわけではないため)。このロジックはどこにあるべきですか?この種の要件に最適な設計パターンは何ですか?