棱镜模块:参考组装一次

时间:2018-10-30 20:20:29

标签: forms xamarin module prism

编辑:将其缩短。

我们按照棱镜文档和我们的要求创建了三个模块。

我们对模块进行了水平切片。

  1. SharedServices
  2. BusinessLogic
  3. UserInterface

在UserInterface中,我们正在使用Syncfusion组件和其他软件包,将所有内容都放入 UserInterface 模块中非常好,但是我们如何才能在Shell中引用该模块中的nuget程序集(应用例如主题)以避免在每个模块和外壳中都有引用?

我们应该将nugetpackage添加到每个模块和外壳程序(不好吗??),还是可以有一个模块来定义引用外部程序集的基类,例如,这些模块将是可使用的(使用ResourceDictionary)并且可用在整个解决方案中(外壳和其他模块)。

谢谢。

1 个答案:

答案 0 :(得分:1)

一个非常广泛的问题,可能会被解决,但是我尝试给您一些指导思想:

通常,您可以水平切片(如您所做的那样,使用包含所有视图的UI模块加上所有服务的逻辑模块)或垂直切片(如您的产品模块所建议的那样):视图,视图模型,产品服务一个模块,另一个用于用户)。

您可以同时做这两个事情,但是然后您应该“切入”,因此,一个用于product-ui的模块,一个用于user-ui的模块,一个用于product-services的模块,一个用于user-services的模块...您就会明白。不过,这意味着很多模块。

此外,在创建模块时,对要实现的目标有所了解。模块可以封装要在另一个应用程序中重用的组件。或者它们可以封装可交换的组件,因此您可以在今天和明天创建一个汽车共享应用程序,然后将汽车模块换成自行车模块,并拥有一个自行车共享应用程序。或者可以将它们用于在规范化环境中基于风险分析来强制执行代码隔离。我要传达的是:不要仅仅为了拥有模块而创建模块,而是要使每个模块都有明确的用途。

此外,定义模块的接口。我不希望模块相互引用,因为它有效地破坏了原本会存在的所有隔离。创建仅包含公共接口的单独的非模块程序集。然后使您的模块包含作为内部类型的实现。在理想的世界中,没有模块组装包含公共类型。接口组件可以是每个模块,每个使用者或模块之间的链接(N2图表中的那些复选框,您有一个,不是吗?)。

您要保持模块的数量以及模块之间的依赖性(不是通过“程序集引用”,而是通过接口组装)。

  

我们如何从外壳中的模块引用nuget程序集(例如,应用主题),以避免在每个模块和外壳中都有引用?

您应将“接口”部分(例如,基类或DTO,而不是模块的一部分)与实际的服务部分(即模块)分开。示例:unity具有用于接口(Unity.Abstractions)的nuget程序包和包含容器实现(Unity.Container)的程序包。基本上每个人都引用该接口没有错,这就是说“我想使用该接口”。