我需要分离业务对象和业务逻辑吗? Asp.net C# 中带有存储库模式的 MVC

Do I need to Separate Business Objects and Business Logic? Asp.net MVC with Repository Pattern in C#

我找不到这个问题的答案。基本上,现在我有这些层:

我的存储库将 return 业务对象。例如,GetCustomer 将 return Customer.

但是,在我的业务层中,我还想添加将存储库用于 add/update/delete 记录的逻辑,这样我就可以在我的 MVC 控制器中重用这些方法。但这不起作用,因为我不能让我的数据访问层引用我的业务层,也不能让我的业务层引用我的数据访问层。 (它创建了一个不允许的循环引用)。

你们认为最好的解决方案是什么?我应该把我的业务逻辑放到它自己的项目中吗?

所以代替:

Hello.Data
Hello.Business

我要:

Hello.Data
Hello.Business
Hello.BusinessLogic

还是我的想法全错了?谢谢!

为什么要将业务逻辑与业务模型分开?逻辑应该是模型中。

业务逻辑层不应该引用任何东西,除了小的公共实用程序库。基本上,它不应该依赖于基础架构问题(如应用程序技术、数据库技术等)。它应该包含 只是 业务逻辑。

所有其他层都应引用业务逻辑层。

This doesn't work though, since I can't have my Data Access Layer reference my Business Layer and also have my Business Layer reference my Data Access Layer.

正确!这个设计的错误是业务逻辑层引用了数据访问层 完全 。不应该。

应该,但是,包含接口用于数据访问(和其他基础设施问题)实现 由数据访问层。业务逻辑层只需要知道接口,它不知道也不关心是什么实现了这些接口。

然后将使用依赖项注入容器将实现连接到接口。

  • 应用层引用依赖注入层对其进行初始化,并将容器(本身实现了一个通用的业务逻辑接口)传递给业务逻辑层。
  • 依赖注入层引用业务逻辑层来了解接口,并引用数据访问(和其他基础设施)层来了解实现。
  • 数据访问(和其他基础设施)层引用业务逻辑层以了解要实现的接口。
  • 业务逻辑层没有引用任何东西。它需要一个已配置的依赖项注入容器并使用该容器来获取接口的实现。