具有倍数表示层的{3层架构

时间:2016-06-13 08:11:05

标签: c# architecture

我正在尝试构建一个新的应用程序并遇到麻烦以使其干净。

这个想法是这样做的:

  • WebSite1(表示层)
      
        
    • XAML页面
    •   
    • 背后的代码
    •   
    • 我们称之为PageViewModel(表示页面模型的对象)
    •   
  • WebSite2(表示层)
      
        
    • 与website1相同
    •   
  • WebSiteX(表示层)

      
        
    • 与网站1相同
    •   
  • 商业项目

      
        
    • 服务(将通过页面后面的代码调用,将DAL对象转换为可由网站读取的ViewModel)
    •   
    • ViewModel(表示真实对象可以在多个页面/网站中使用)
    •   
  • DAL项目

      
        
    • 经理(按服务调用,返回DAL对象)
    •   
    • DAL(访问数据库或其他来源)
    •   

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

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

我看到的唯一另一种方法是将Services和ViewModels放在每个网站中,但如果他们使用类似的对象,代码将被复制。

你会怎么做?

感谢阅读。

2 个答案:

答案 0 :(得分:0)

我认为演示规则可以在PageViewModel中,或者您可以在从PageViewModel转换为BusinessObjects时使用验证规则(您将它们称为View Models)。

此外,您已经提到的内容也可以使用

  

我看到的唯一另一种方法是将服务和ViewModel放在每个网站中,但如果他们使用类似的对象,代码将被复制。

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

答案 1 :(得分:0)

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

尝试将“必需”之类的内容分成可以覆盖的单独方法,可能在基本实例中将其声明为抽象,以便强制您在实现版本中定义该逻辑。

棘手的部分将是构建PageVM对象,为此你可能想要调查Factory或Builder模式,让你的UI项目创建自定义的PageVM对象。