N层架构中的Autofac模块

Moh*_*hin 9 c# dependency-injection inversion-of-control autofac autofac-module

目前我使用Autofac为IOC和在两个组合物根(一个用于前端和一个用于后端)我注册和解析组件跨越的Service,BusinessData层.

截至目前,我只有一个像'AccountingModule'.现在我要在应用程序中添加几个新模块,名称如下InventoryModule,......

我的问题是我应该在各层之间拆分每个模块类(解决方案1)还是为每个模块分别设置所有层(解决方案2)

解决方案1:

Service Layer

(AccountingMoudle, InventoryModule, ...)
Run Code Online (Sandbox Code Playgroud)
Business Layer

(AccountingMoudle, InventoryModule, ...)
Run Code Online (Sandbox Code Playgroud)
Data Layer

(AccountingModule, InventoryModule, ...)
Run Code Online (Sandbox Code Playgroud)

要么

解决方案2:

AccountingModule
(
 Service Layer,
 Business Layer,
 Data Layer
)
Run Code Online (Sandbox Code Playgroud)
InventoryModule
(
 Service Layer,
 Business Layer,
 Data Layer
)
Run Code Online (Sandbox Code Playgroud)

编辑1

+-----------------------------+                              +----------------------------+
+--+AccountingServiceComponent                               +-+InventoryServiceComponent
|                                      Weak Dependency       |
+--+AccountingBusinessComponent      <------------------+    +-+InventoryBusinessComponent
|                                                            |
+--+AccountingDataComponent                                  +-+InventoryDataComponent
       +                                                         +
       +-+ GetDocumentByID(int id)                               +--+GetProductByID(int id)
       |                                                         |
       +-+ SaveDocument(Document d)                              +--+SaveProduct(Product p)
Run Code Online (Sandbox Code Playgroud)

编辑2 架构:

在此输入图像描述

Erk*_*rel 4

目前我正在使用 Autofac 进行 IoC 并有两个组合根(一个用于前端,一个用于后端)

我知道这只是一个具有前端和后端部分的应用程序。首先,您应该有一个组合根,否则您的设计将在某些时候失败。您拥有哪种解决方案并不重要。

我们假设它们是两个不同的驱动程序应用程序(例如 Web 服务和网站)。

我的问题是我应该在层之间拆分每个模块类(解决方案 1)还是为每个模块单独分配所有层(解决方案 2)

编辑:实际上你的问题是“水平(解决方案 1)还是垂直(解决方案 2)切片更好?” (将您的应用程序划分为模块

这篇水平与垂直切片文章对此进行了很好的解释。它说

尽可能垂直。当你也有水平的时候。

这是另一篇好文章

编辑后,我发现您已经垂直实现了模块,因此继续垂直进行(解决方案 2)。