2016-06-13 103 views
0

我正在尝试构建一个新应用程序并将其运行以解决问题。具有多重表示层的三层体系结构

的想法是使这种方式:

  • 的WebSite1(表示层)
    • XAML页面
    • 页面代码隐藏
    • 我们称之为PageViewModel(对象,表示页型号)
  • WEBSITE2(表示层)
    • 同WEBSITE1
  • WebSiteX(表示层)

    • 同网站1
  • 商业项目

    • 服务(将页面背后的代码是调用,转换DAL对象到视图模型通过网站可读)
    • 视图模型(代表真正的目的是能够在几页/网站使用)
  • DAL项目

    • 管理器(按服务呼叫,返回DAL对象)
    • DAL(访问数据库或其他来源)

我的ViewModels存储到一个分离式的项目,可以是如果需要,可用于各种网站。

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

我看到的唯一方法是将服务和ViewModels放入每个网站中,但如果它们使用相似的对象,代码将被复制。

你会怎么做?

感谢您的阅读。

回答

0

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

尝试将诸如“必需”之类的东西分解为可以被重写的单独方法,可能会将其声明为基本实例中的抽象,以便强制您在实现版本中定义该逻辑。

棘手的问题是构建PageVM对象,为此您可能需要调查Factory或Builder模式以使UI项目创建自定义PageVM对象。

+0

感谢您的回答。也许ViewModels可以被定义为一个“全局项目”,并在需要时通过特定的提交规则继承到每个Web站点。它仍然看起来像重复,因为在很多情况下,我将拥有相同的对象,但它可能更干净。 –

0

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

而且,你已经提到了哪些也将工作

我看到的唯一的另一种方法是把服务和各的ViewModels里面的网站,但如果他们使用类似对象的代码将被复制。

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

+0

感谢您的回答。验证规则是ViewModel属性顶部的[必需]属性。这样验证可以在验证表单之前运行。 ViewModel到BusinessObjects的转换也可以有验证规则,但在这个过程中有点晚。复制可能是我会选择的选项,但我不喜欢在多个地方使用相同的“转换代码”具有相同对象的想法。 –