棱镜模块:一次参考组装

Prism modules : reference assembly once

编辑:缩短了。

我们根据 prism 文档和我们的要求创建了三个模块。

我们用模块做了水平切片。

  1. SharedServices
  2. 业务逻辑
  3. 用户界面

在 UserInterface 中,我们使用 Syncfusion 组件和其他包,将所有内容都放在 UserInterface 模块中会很棒,但是我们如何从该模块中引用 nuget 程序集shell(例如应用主题)以避免在每个模块和 shell 中有引用?

我们是否应该将 nugetpackage 添加到每个模块和 shell(这不好吗...?)或者是否可以有一个定义基础 class 引用外部程序集的模块和这将是主题化的(使用 ResourceDictionary)并且可以在整个解决方案中使用(shell 和其他模块)。

谢谢。

非常广泛的问题,它可能会被关闭,但我试着给你一些 guiding 的想法:

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

你可以两者都做,但是你应该 "slice through",所以一个模块用于产品-ui,一个用于用户-ui,一个用于产品服务,一个用于用户服务......你明白了。不过,这意味着很多模块。

此外,在创建模块时,请了解您想要实现的目标。模块可以封装要在另一个应用程序中重用的组件。或者它们可以封装可交换的组件,这样你就可以在今天创建一个汽车共享应用程序,明天将汽车模块换成自行车模块并拥有一个自行车共享应用程序。或者,它们可用于根据受监管环境中的风险分析强制执行代码隔离。我想表达的是:不要为了拥有模块而创建模块,让每个模块都有一个明确的目的。

另外,定义模块的接口。我不喜欢模块相互引用,因为它有效地破坏了本来会存在的所有隔离。创建仅包含 public 接口的独立非模块程序集。然后让你的模块包含实现作为内部类型。在理想情况下,没有模块程序集包含 public 类型。接口组件可以是每个模块或每个消费者或模块之间的每个 link(N2 图表中的那些复选框,你有一个,不是吗?)。

您想保持模块数量合理,以及它们之间的依赖关系(不像 "assembly references" 中那样,而是通过接口组装)。

how can we reference nuget assemblies from that module in the shell (to apply theming for example) to avoid having references in each modules & the shell ?

您应该将 "interface" 部分(例如基础 类 或 DTO,而不是模块的一部分)和实际服务部分(即模块)分开。示例:unity 有一个用于接口的 nuget 包 (Unity.Abstractions) and one that contains the container implementation (Unity.Container)。大家引用接口没什么问题,基本上就是这么说的"I want to use that interface".