如果我从控制器中取出逻辑,是不是需要业务逻辑层?

Posted

技术标签:

【中文标题】如果我从控制器中取出逻辑,是不是需要业务逻辑层?【英文标题】:Is a business logic layer necessary if I take logic out of the controllers?如果我从控制器中取出逻辑,是否需要业务逻辑层? 【发布时间】:2021-03-28 16:43:56 【问题描述】:

我正在开发一个 API 项目,其中一些端点在控制器的操作方法中有很多业务逻辑。许多文献表明我将这个业务逻辑提取到一个完全不同的项目中,并让 API 项目引用它。我的问题是我真的需要一个单独的域/业务逻辑层吗?似乎我可以将业务逻辑提取到 API 层中自己的类中,并且可以完成同样的事情。感谢您的洞察力!

【问题讨论】:

【参考方案1】:

为领域/业务层建立一个单独的项目有一些优势。

    其他层也可以使用您创建的域/业务类,而无需了解/引用 API 层及其依赖项。

想象一下,您的 API 层使用 AbcCalculator(您已在 API 层中定义)。如果您想在数据访问层中使用 AbcCalculator,那么您必须引用您的 API 层。然后你不能从你的 API 层引用你的数据访问层,因为它是一个循环依赖。

    当您为域/业务层编写测试时,您的测试项目将不需要引用 API 项目及其依赖项。

    单独的项目意味着开发人员不会意外引用真正属于 API 层、域/业务层的对象。这会导致以后难以分离层,因为最终会产生循环依赖。

【讨论】:

感谢您的解释PeteGo!

以上是关于如果我从控制器中取出逻辑,是不是需要业务逻辑层?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们需要在单独的服务层中编写业务逻辑而不是在控制器本身中编写?

java三层架构:数据访问层业务逻辑层表现层

控制器逻辑与服务/业务层逻辑

CakePHP 业务逻辑层

3层架构业务逻辑层无逻辑

业务逻辑是不是属于服务层?