7

我阅读了几篇文章,它们将域模型(如在 MVC 中)定义为包含业务逻辑的东西。我从来没有考虑过一个模型来保存模型属性以外的任何方法。

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

提前致谢。

4

3 回答 3

12

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

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

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

结论

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

欢迎来到权衡世界。:)

于 2012-11-23T10:11:58.577 回答
4

MVCModel确实可以有业务逻辑。在这里更深入地讨论了 MVC 职责,这里是关于贫血域模型的讨论——这可能有助于您理清思路吗?

来自MSDN

模型,为代表 MVC Web 应用程序的应用程序模型的类提供。此文件夹通常包含定义对象和定义与数据存储交互的逻辑的代码。通常,实际的模型对象将位于单独的类库中。但是,当您创建新应用程序时,您可能会将类放在这里,然后在开发周期的稍后阶段将它们移动到单独的类库中。

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

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

于 2012-11-23T10:05:41.937 回答
0

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

于 2012-11-23T10:11:35.417 回答