私は3層アーキテクチャを採用しています。あるモジュールのビジネスレイヤーは、別のモジュールのリポジトリに直接アクセスできますか?
1)C#MVCアプリケーション - UI層
2)ビジネスレイヤ - サービス・インターフェースとその実装とリポジトリインターフェース
3)データアクセス層からなる - リポジトリインタフェースの実装からなる
アプリケーションは異なるモジュールに分割されています。モジュールは、C#クラスライブラリだけです。各モジュールには、独自のビジネスレイヤーとデータアクセスレイヤーがあります。レイヤー間の疎結合があるため、各レイヤーはインターフェイスを介して他のレイヤーにアクセスします。ここで、あなたの例を与えるためには、アプリケーションが
// UI layer
public class UserController: Controller
{
IUserService userService;
IOrderService orderService;
public UserController(IUserService userService, IOrderService orderService){
this.userService = userService;
this.orderService = orderService;
}
}
//Business layer - User module
public class UserService: IUserService
{
IUserRepository userRepository;
IOrderRepository orderRepository;
public UserService(IUserRepository userRepository, IOrderRepository
orderRepository){
this.userRepository = userRepository;
//Should this be here or replaced by order service ?
this.orderRepository = orderRepository;
}
}
//Business layer - Order module
public class OrderService: IOrderService
{
IOrderRepository orderRepository;
public UserService(IOrderRepository orderRepository){
this.orderRepository= orderRepository;
}
}
//Data access layer - User module
public class UserRepository: IUserRepository {
}
//Data access layer - Order module
public class OrderRepository: IOrderRepository {
}
それが直接注文リポジトリにアクセスするためのユーザー・サービスのためのOKですか、それが唯一の注文サービスに依存している必要があり積み上げている方法ですか?
サービスにはデータベース操作を実行する前に実行するビジネスロジックがあるため、リポジトリの代わりにサービスを使用するとよいでしょう。しかし、ここでは両方のサービスが互いに依存してはならないことに注意する必要があります。それ以外の場合は、デッドロック状態になります。 –