2017-04-08 25 views
1

我有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 { 
} 

是否確定爲用戶服務直接訪問訂單倉庫還是應該有僅在訂購服務的依賴?

+0

使用服務而不是存儲庫是很好的,因爲服務在執行任何數據庫操作之前都要執行業務邏輯。但是,在這裏你必須小心,這兩個服務不應該相互依賴,否則你最終會陷入僵局。 –

回答

1

您正在訪問IOrderRepositoryUserService。你的問題是這是否是正確的方法,或者它應該只訪問IUserRepository並且請撥打OrderService而不是IOrderRepository

IMO,任何服務都可以根據需要調用任何存儲庫。 Service和Repository之間不存在關係。

存儲庫爲您提供對數據的訪問。如果這種訪問在多個服務中是必需的,那麼多個服務可以使用相同的Repository。這看起來很乾淨和可以解釋。

相關問題