具有多个表示层的 3 层架构

3-Tier Architecture with multiples presentation layer

我正在尝试构建一个新的应用程序,但 运行 陷入了麻烦以使其变得干净。

当时的想法是:

我的 ViewModels 存储在一个单独的项目中,如果需要可以在各种网站中使用。

我对演示规则(比如这应该是一个数字或这是必需的)将存储到业务层(ViewModels 内的属性)这一事实感到不快。也有可能两个网站使用相同的对象但具有不同的表示规则(在一种情况下需要,而在另一种情况下不需要)。

我看到的唯一其他方法是将服务和 ViewModel 放在每个网站中,但如果它们使用相似的对象,代码将会重复。

你会怎么做?

感谢阅读。

我认为演示规则可以在 PageViewModel 中,或者在从 PageViewModel 转换为 BusinessObjects(您称它们为视图模型)时可以有验证规则。

还有,你刚才提到的也行

The only other way I see is to put the Services and the ViewModels inside each websites but if they use similar objects the code will be duplicated.

我会保留重复的 ViewModel 而不是服务。是的,代码是重复的,但这给了我自由,并且尽管具有相同的基础业务模型,但有意单独维护单独的网站。

我认为这可能是一个很好的继承实例。创建您的 PageVM 的基本实例 类,并覆盖不同站点中的行为。

尝试将 "requiredness" 之类的东西分离到可以覆盖的单独方法中,可能在基础实例中将其声明为抽象,这样它会强制您在实现版本中定义该逻辑。

更棘手的部分将是 PageVM 对象的构造,为此您可能想要研究 Factory 或 Builder 模式以使您的 UI 项目创建自定义 PageVM 对象。