ASP.NET MVC - Model可以有业务逻辑吗?

时间:2012-11-23 09:48:49

标签: asp.net-mvc

我阅读了几篇将域模型(如在MVC中)定义为包含业务逻辑的文章。我从未考虑过模型来保存除模型属性之外的任何方法。

我想知道实际上是否存在支持在域模型中具有功能和业务逻辑的思想。

提前致谢。

3 个答案:

答案 0 :(得分:12)

当然,业务逻辑应该在域模型中。但是,领域模型不仅仅是实体框架实体。域模型由许多反映业务领域的小类组成。

在我的典型MVC应用程序中,我通常将某种类型的业务逻辑拆分为这些(但不限于):

    负责视图模型的
  • ViewModels
  • 控制器,它很薄,负责应用程序流程。
  • 简单业务逻辑,例如必填字段可以作为实体框架模型中的属性或 ViewModels 存在。
  • 复杂的业务逻辑,例如下订单,预订单将被提升为自己的类,例如PlaceOrderOperation或PlaceOrderCommand。
  • 简单查询逻辑可能位于Controller内部,也可能是DbSet<Entity>类型的短扩展方法。
  • 假设查询很复杂,
  • 复杂查询也会提升为自己的类,例如GetMostPorpularProductsQuery。
  • 基础设施组件可能是Entity Framework或MVC组件的扩展,例如ActionFilter,CustomRoute,CustomTemplate或其自己的类,如EncyptionHelpers等。

结论

构建域模型不仅仅是使用BusinessLogic创建类前缀,例如UserBusinessLogic,也可以使用UserServices等服务。它应该由许多负责一件事的小班组成。当然,您需要使用一些设计模式,框架选择,基础架构组件,如错误处理,本地化,缓存等。

欢迎来到权衡的世界。 :)

答案 1 :(得分:4)

MVC Model确实可以拥有业务逻辑。 MVC职责已经进行了更深入的讨论here,这是对anemic domain models的讨论 - 这可能有助于为您解决问题?

来自MSDN

  

模型,为代表应用程序的类提供   您的MVC Web应用程序的模型。该文件夹通常包含代码   定义对象并定义与之交互的逻辑   数据存储。通常,实际的模型对象将在   单独的类库。但是,在创建新应用程序时,   你可以把类放在这里,然后将它们移到单独的类中   图书馆在开发周期的后期。

可能令人困惑的问题是许多ASP.Net MVC实现使用View Models,这些类是用于在View和Controller之间传输表示层数据的类。

在典型的大型项目设置中,我们通常会删除Models文件夹,而是将我们的EF数据层,实体和业务/服务逻辑完全移动到单独的程序集中。

答案 2 :(得分:0)

根据我的经验,放置业务逻辑的最佳位置是控制器和模型之间的层。尝试一些流行的模式,例如repositorytasks/commands