3

我们的应用程序尽最大努力使控制器保持小型化,我们的视图与 UI 相关,并且我们为每个视图提供了一个 ViewModel,用于提取模型数据。我们使用 AutoMapper 可以将模型映射到视图模型中。

在某些情况下,我们需要大量代码来构建 ViewModel,虽然技术上可以在 AutoMapper 的 Map 功能中完成,但它变得庞大而丑陋。所以我们有一些逻辑,它已经进入了我们的一些 ViewModel,但是这些逻辑变成了 200 多行,而且感觉不正确。例如,对于一个 ViewModel,我们有大约 6 个属性,这些属性不是来自单个模型,而是来自大约 4-5 个模型,并且是动态的,因为它们是在运行时计算的,因此它不像从模型到我们的 ViewModel 中。

有没有其他人遇到过这个问题,或者发现需要为那些无法从单个模型轻松构建的 ViewModel 创建某种 ViewModel 工厂?

编辑

示例:假设您有一个课程页面,例如“Beginning French 101”。课程模型可能有老师、主题、先决条件、班级编号、部分等。当学生访问课程页面时,我可能想更改显示有关该班级(或其他班级)的附加信息的方式或内容学生的注册状态、注册、过去的历史、学生注册的其他课程等。我这里有两个模型,课程和学生,但我可能希望根据某些业务规则提取其他信息以包含在 ViewModel 中.

4

1 回答 1

2

如果它是一个业务逻辑,那么它不应该放在你的映射层中。Dtos在业务层中尽可能多地定义和准备对象。如果您的业务模型和视图模型之间存在如此巨大的差异,则意味着您可能需要另一层来将庞大的业务域模型转换为数据传输对象,以便更轻松地映射到视图模型。一般来说,您应该避免在映射层中放置复杂的业务逻辑。

不幸的是,如果没有您的特定代码示例,将很难进一步扩展。

于 2012-09-24T14:14:03.963 回答