9

目前我正在使用AutofacIoC 和两个组合根(一个用于前端,一个用于后端),我注册并解析跨越和Service层的组件。BusinessData

到目前为止,我只有一个像“AccountingModule”这样的。现在,我将向应用程序添加几个新模块,其名称类似于InventoryModule...

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

解决方案1:

Service Layer

(AccountingMoudle, InventoryModule, ...)

Business Layer

(AccountingMoudle, InventoryModule, ...)

Data Layer

(AccountingModule, InventoryModule, ...)

或者

解决方案2:

AccountingModule
(
 Service Layer,
 Business Layer,
 Data Layer
)

InventoryModule
(
 Service Layer,
 Business Layer,
 Data Layer
)

编辑 1

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

编辑 2 架构:

在此处输入图像描述

4

2 回答 2

4

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

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

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

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

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

这篇水平与垂直切片文章很好地解释了这一点。它说

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

这是另一篇好文章

在您进行编辑后,我看到您已经将模块实现为垂直,因此请垂直进行(解决方案 2)。

于 2016-04-23T09:17:46.110 回答
1

您不应该尝试将 Autofac 模块移动到库中,您可能正在尝试做同样的事情,这就是您首先提出这个问题的原因。

如果您有多个组合根,那么您应该在每个根中创建模块。不同的组合根很有可能使用不同的模块。此外,您可能不想添加 Autofac 作为解决方案中每个库的引用。.

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

取决于注册的数量,如果它是一个非常小的数字,那么你可以使用AccountingModuleand InventoryModule

如果会计上的注册很多但库存中的数量很少,那么您可以拥有AccountingServiceModule, AccountingBusinessModule, AccountingDataModuleand InventoryModule。您可以从应用程序的每个子域(库存、帐户等)一个模块开始,并根据需要拆分它们。

于 2016-04-28T13:28:48.647 回答