在基于Web的体系结构上使用POCO,DTO和ViewModel

时间:2015-07-27 04:08:49

标签: c# asp.net-mvc viewmodel poco dto

在我正在进行的项目中,我有3层域。

MVC 5 App [有参考] - >类库[有参考] - >数据访问层(实体框架)。

  • DAL有POCO
  • 类库具有DTO
  • MVC App有ViewModels

例如,我为每个图层都有一个非常基本的人类,我使用的是Auto Mapper图;

d

由于此人类非常基础,因此所有三个层都具有几乎相同的类定义。随着我的项目的增长,有更多的类在所有层上都具有相同的结构。我将相同的类定义从一个映射到另一个。

有一些复杂的类在每一层上有3个不同的定义是有意义的,但类似这样的类" person"如果这是一种在每一层上定义相同类定义的可接受方法,那么class就是我的事。

我知道这些问题看起来像是一个广泛主题的候选人"问题,但我找不到明确的定义或在线博客文章。由于书籍主要集中在其中一个层面上,因此无法对此进行全面的报道。

很快,即使对于基本实体类,每个层上的类定义的好方法是什么?

2 个答案:

答案 0 :(得分:1)

经过对此概念的更多研究后,我发现之前提出的问题非常相似: How do I reduce duplication of domain/entity/DTO objects?

这个问题引出了一篇很棒的文章; http://blog.ploeh.dk/2012/02/09/IsLayeringWorththeMapping/

基本上,如果我想要层之间清晰的分离,那些之间的一些重复和映射是我需要支付的价格,没有免费午餐这样的东西。

否则,正如@Maris所说,我可以选择创建将在层上传输的公共持久性对象的路径,它将减少重复和相关实体类更改所花费的时间,但是我可能最终拥有不相关的属性和属性在我的课程上保持对所有图层的支持。

结果我开始走第一条路。

答案 1 :(得分:0)

创建in your case项目并将所有公共类移动到该项目的最佳方法Common,因此您的三个层中的每一个都可以访问公共类。普通项目不应该对你的3层知之甚少。

但我不认为在每一层上使用不同的viewModel / DTO / POCO是最好的方法。

我通常使用下一个架构:

数据访问层(DAL) - 让他们POCOs从数据库映射(在Domain models的情况下同时为DDD

业务层(BL) - 使用DAL中的Domain models

表示层(PL) - 从BL获取Domain models并将它们映射到ViewModels并使用ViewModel作为它的表示逻辑。