解决方法
当然,业务逻辑应该在域模型中.但是,领域模型不仅仅是实体框架实体.域模型由许多反映业务领域的小类组成.
在我的典型MVC应用程序中,我通常将某种类型的业务逻辑拆分为这些(但不限于):
>负责视图模型的viewmodel.
>控制器很薄,负责应用程序流程.
>必需字段等简单业务逻辑可以作为实体框架模型或viewmodel中的属性存在.
>复杂的业务逻辑(如下订单,预订单)被提升为自己的类,如PlaceOrderOperation或PlaceOrderCommand.
>简单查询逻辑可能在Controller内部或短扩展方法到DbSet< Entity>类型.
>复杂查询也提升到自己的类,例如GetMostPorpularProductsQuery,假设查询很复杂.
>基础结构组件可以是Entity Framework或MVC组件的扩展,例如ActionFilter,CustomRoute,CustomTemplate或其自己的类,如EncyptionHelpers等.
结论
构建域模型不仅仅是使用BusinessLogic(如UserBusinessLogic)或使用UserServices等服务创建类前缀.它应该由许多负责一件事的小班组成.当然,您需要使用一些设计模式,框架选择,基础架构组件,如错误处理,本地化,缓存等.
欢迎来到权衡的世界.