在MVC分层应用程序中正确定义和设计业务,域和视图模型

时间:2012-02-21 09:07:23

标签: asp.net-mvc-3 design-patterns models layered

我在C#和Razor中有一个ASP.NET MVC3。应用程序的体系结构分为数据访问层(EF类+存储库),服务层,控制器,ViewModel和View。

我的应用是信息中心,它必须使用图表显示有关产品的统计信息。

假设我有ProductProductCategory表,并且在图表中,我必须显示每ProductsProductCategory的销售百分比。在x轴上,我有几个月,在y轴上的百分比是 ProductPerCategory / ProductTotal ,因此我的行数与ProductCategories一样多。

在这种情况下,我的域模型 EF 上的ProductProductCategory个对象生成。我的存储库将这些域对象提供给其上层(服务层)。

我的商业模式ProductGraph对象生成,我的服务层将此商家对象提供给其上层(Controller)。

我的控制器使用此ProductGraph对象并将其映射到视图模型 ProductGraphViewModel以显示在视图中。

这种模型之间的区别是否正确?在层之间传递的对象的定义是否有任何不足或不好的方法?

2 个答案:

答案 0 :(得分:1)

嗯,你有我的外行竖起大拇指,这似乎很标准。其他一些需要考虑的事项是:1)您的DAL /服务层接口是什么? 2)你是否使用依赖注入(将这些接口传递给控制器​​实例)?这样你就可以轻松切换实现,或模拟单元测试。

blog post可能会引起您的兴趣。

答案 1 :(得分:1)

我会问自己的一些问题来回答你的问题。

  1. 您对“域名模型”和“商业模式”的区别是什么?每个人的价值是否比另一个更多/更少?如果不知道更多,我会认为它们是相同的。

  2. 您的服务层有什么好处?人们(包括我自己)经常陷入“服务层”陷阱,而实际上它只是包装了你的Repository方法。您最终会将ORM细节泄露给消耗层,从一开始就破坏了抽象点。

  3. 如果你给我们一些代码流之间的代码流,可能会有所帮助。

    是的,@ sweaver2112是关于使用DI的。设置简单,效益最大。