构建视图模型的业务逻辑

时间:2012-09-24 14:10:15

标签: asp.net-mvc

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

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

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

修改

示例:假设您有一个课程页面,例如“Beginning French 101”。课程模型可能包含教师,科目,预先要求,班级编号,部分等。当学生访问课程页面时,我可能想要更改基于此课程(或其他课程)的显示方式或内容。学生的注册状态,注册,过去的历史,学生注册的其他课程等等。我这里有两个模型,课程和学生,但我可能想根据某些业务规则提供其他信息以包含在ViewModel中

1 个答案:

答案 0 :(得分:2)

如果它是业务逻辑,则不应将其放在映射层中。定义Dtos并在业务层中尽可能准备对象。如果您的业务模型和视图模型之间存在如此巨大的差异,则意味着您可能需要另一层将大量业务域模型转换为更容易映射到视图模型的数据传输对象。通常,您可以避免在映射层中放置复杂的业务逻辑。

遗憾的是,如果没有您的特定代码示例,则很难进一步扩展。