具有多个表示层的 3 层架构
3-Tier Architecture with multiples presentation layer
我正在尝试构建一个新的应用程序,但 运行 陷入了麻烦以使其变得干净。
当时的想法是:
- WebSite1(表示层)
- XAML pages
- Code behind pages
- What we call PageViewModel (Object that represents page model)
- WebSite2(表示层)
- Same as website1
WebSiteX(表示层)
- Same as website 1
商业项目
- Services (Will be call by code behind pages, transform DAL Object into ViewModel readable by website)
- ViewModel (Represents real object can be use in several pages/websites)
DAL 项目
- Manager (Call by services, return DAL object)
- DAL (Access to database or other sources)
我的 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 对象。
我正在尝试构建一个新的应用程序,但 运行 陷入了麻烦以使其变得干净。
当时的想法是:
- WebSite1(表示层)
- XAML pages
- Code behind pages
- What we call PageViewModel (Object that represents page model)
- WebSite2(表示层)
- Same as website1
WebSiteX(表示层)
- Same as website 1
商业项目
- Services (Will be call by code behind pages, transform DAL Object into ViewModel readable by website)
- ViewModel (Represents real object can be use in several pages/websites)
DAL 项目
- Manager (Call by services, return DAL object)
- DAL (Access to database or other sources)
我的 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 对象。