私はDDDの原則に準拠しようとするいくつかのアプリケーションに取り組んできましたが、サービスレイヤーとリポジトリの間にコードの臭いのように感じる重複がある状況に陥ることに気づきました。
サービスレイヤーのほとんどの操作では、CRUD操作、GetAll、GetById、Create、Deleteなどへの直接マッピングのようです。アーキテクチャのフローはこれらの行内にあります。サービスレイヤーを呼び出すコントローラーがあります。バックエンドと通信するORMを呼び出すリポジトリを呼び出します。
したがって、たとえばGetAllはSLとリポジトリの両方に存在します。さて、GetAllが特定のアイテムを無視する必要があるという変更/ビジネス要件がある場合、どのようにそれを行うべきですか、リポジトリでこれらを無視する必要がありますか、それともサービスレイヤーに配置する必要があるビジネスロジックですか?ORMを直接呼び出すサービスレイヤーがあれば、生活は楽になりませんか?
要約すると、サービスレイヤーが一部のビジネスロジックを抽象化できることは理解していますが、ほとんどの場合、単純なCRUD操作を処理している場合は、リポジトリを削除する方が簡単ではないでしょうか。しかし、SLに複雑なビジネスロジックを持ついくつかのメソッドも含まれている場合、これらはリポジトリを経由する必要がありますか?優れた設計の観点から、一貫性を優先し、常にリポジトリを通過するか、単純に保ち、CRUD操作への単純な1対1のマッピングではない場合にのみリポジトリを使用する必要があります。
PS:似たような質問があるように見えますが、満足のいく答えは見つかりませんでした