ASP.Net MVC アプリケーション、モバイル アプリケーションなどで同じレイヤーを使用するために、Entity Framework (POCO エンティティ) を使用してレイヤード アーキテクチャ (すべてのレイヤーが同じマシン上にある) を設計しています。また、テスト容易性を維持するために...
UI レイヤー > サービス レイヤー > リポジトリ レイヤー > エンティティ フレームワーク > データベースを配置し、依存関係の挿入、レイヤーの抽象化、関心の分離を行います。
2 つのメソッドがあるとします (Customer、Order はエンティティ クラスです)。これらのメソッドをどのレイヤーに配置する必要がありますか?:
- public IList GetOrdersByCustomerId(int CustomerId) LINQ クエリを含みます。
(リポジトリ層、またはサービス層?) - public void RequestAnOrderAndStartTheShipmentProcess(Customer CustomerEntity, Order OrderEntity) orderRepository.Add(OrderEntity)、shipmentRepository.Add(ShipmentEntity) などの挿入操作を行います...
(別のビジネス ロジック層、またはサービス層?)
- public IList GetOrdersByCustomerId(int CustomerId) LINQ クエリを含みます。
IOrderService インターフェイスと、依存性注入用の "OrderService : IOrderService" クラスがあります。インターフェイスとクラスは同じアセンブリに配置されますか、それとも別のアセンブリに配置する必要がありますか?
ありがとう
編集
ご回答有難うございます。しかし、この場合、次の 4 つの質問について考えるようになりました...
1. UI に DataAccess アセンブリへの参照がある場合、開発者は UI コードで DataAccess クラスに直接アクセスできますが、コード レビューを行うための余分な労力が発生するべきではありません。 (たとえば、チームにジュニア開発者がいる場合)?
2. リポジトリ層 (実際のクエリを実行する) とサービス層 (OrderRepository クラスで GetOrdersByCustomerId メソッドを呼び出す) の両方に GetOrdersByCustomerId メソッドが必要であると理解しましたが、正しいですか?
3. また、(ほぼ) すべてのテーブルを維持するために CRUD 操作を行う必要があります。また、現在のプロジェクトに 96 個のテーブルがあると考えてください (多すぎませんが、少なくもありません)。Add、Update、Delete メソッドが必要です。サービス層でも?それとも、サービス層でもっと「行動」について考える必要がありますか?
4. OrderRepository に GetOrdersByCustomerById、GetOrdersByStatus などのメソッドがある場合、それは DAO クラスのようなものではないでしょうか。