我有三个层一个asp.net MVC应用程序: - 与实体和储存库(NHibernate的)图案 数据层 - 与服务(功能)服务层,它与数据层通信。 - 用asp.net mvc应用程序的ui层,它与服务层进行通信。缺少我的应用程序的一部分/层
问题是我的实体中的数据与我的视图中的数据不同。 所以我使用自定义形状的ViewModels。但我不喜欢我在服务层和视图模型之间进行映射的方式。 一切都在控制器动作中发生。我使用AutoMapper,但我认为意大利面代码太多。 让我举个例子:
1.)我有一个用户注册过程。我有一个名字,姓氏,电子邮件,OpenId输入映射到ViewModel中相同的 属性。但是,比起我需要不同的实体来存储这些数据(一个用于用户,另一个用于openid身份 - 用户可以具有多个openid身份)。 所以在我的控制器操作中,我有一个视图模型和用户实体之间的映射(AutoMapper)和视图模型和openid实体之间的映射(AutoMapper)。在那之后,我用服务功能保存每个实体 。
我错过了一些东西 - 比如自定义的DTO(我认为viewmodel应该在服务层和web层之间共享),它将在web和服务层之间传递。
2.)我在应用程序中有搜索功能。从控制器操作中,我调用服务层,它返回与搜索条件匹配的文档实体列表。 但问题是我也想显示每个结果的类别(不同的实体)。因此,在控制器操作中,我在结果之间循环,并在视图模型中将类别信息 添加到IDictionary结构中。
我也想念这里的东西 - 又一些DTO,它将返回对(新对象)列表:文档,类别。
DTO是否是正确的模式?我应该看看DDD吗?任何相关的材料将不胜感激。
非常感谢!
谢谢你的回答。我会考虑添加新的类型而不是DTO(尽管我需要一些DTO用于我的Silverlight客户端的wcf服务 - 但这是另一个故事)。 – rrejc 2009-11-24 21:25:57