【发布时间】:2009-11-23 06:11:53
【问题描述】:
我有一个三层的 asp.net mvc 应用程序: - 具有实体和存储库(休眠)模式的数据层 - 具有服务(功能)的服务层,它与数据层通信。 - 带有 asp.net mvc 应用程序的 ui 层,它与服务层通信。
问题是我的实体中的数据与我的视图中的数据不同。 所以我使用自定义形状的 ViewModel。但我不喜欢我在服务层和视图模型之间映射的方式。 一切都发生在控制器动作中。我正在使用 AutoMapper,但我认为意大利面条代码太多。 举个例子吧:
1.) 我正在进行用户注册过程。我有一个 FirstName、LastName、Email、OpenId 输入,它们映射到相同的 ViewModel 中的属性。但是,我必须使用不同的实体来存储这些数据(一个用于用户,一个用于 openid 身份 - 用户可以拥有多个 openid 身份)。 因此,在我的控制器操作中,我在视图模型和用户实体之间有一个映射(AutoMapper),在视图模型和一个 openid 实体之间有一个映射(AutoMapper)。在那之后 我用服务函数保存每个实体。
我错过了一些东西——比如自定义 DTO(我认为视图模型不应该在服务层和 web 层之间共享),它将在 web 和服务层之间传递。
2.) 我在应用程序中有搜索功能。从控制器操作中,我调用服务层,它返回与搜索条件匹配的文档实体列表。 但同样的问题是我还想为每个结果显示类别(不同的实体)。所以在控制器动作中,我在结果之间循环并添加类别信息 进入视图模型中的字典结构。
我在这里也错过了一些东西 - 再次是一些 DTO,它将返回对列表(新对象):文档、类别。
DTO 是正确的模式吗?我应该看看DDD吗?任何相关材料将不胜感激。
非常感谢!
【问题讨论】:
标签: asp.net-mvc design-patterns domain-driven-design