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

Design patterns 如果我从控制器中取出逻辑,是否需要业务逻辑层?,design-patterns,api-design,web-development-server,business-logic,Design Patterns,Api Design,Web Development Server,Business Logic,我正在从事一个API项目,其中一些端点在控制器的操作方法中有很多业务逻辑。大量文献表明,我将此业务逻辑拉入一个完全不同的项目中,并让API项目引用它。我的问题是,我真的需要一个单独的域/业务逻辑层吗?看起来我可以在API层中将业务逻辑提取到它自己的类中,这将完成同样的事情。我很欣赏你的洞察力 为域/业务层提供单独的项目有一些优势 其他层也可以使用您创建的域/业务类,而无需了解/引用API层及其依赖项 假设您的API层使用AbcCalculator(您在API层中定义了AbcCalculator)

我正在从事一个API项目,其中一些端点在控制器的操作方法中有很多业务逻辑。大量文献表明,我将此业务逻辑拉入一个完全不同的项目中,并让API项目引用它。我的问题是,我真的需要一个单独的域/业务逻辑层吗?看起来我可以在API层中将业务逻辑提取到它自己的类中,这将完成同样的事情。我很欣赏你的洞察力

为域/业务层提供单独的项目有一些优势

  • 其他层也可以使用您创建的域/业务类,而无需了解/引用API层及其依赖项
  • 假设您的API层使用AbcCalculator(您在API层中定义了AbcCalculator)。如果您想在数据访问层中使用AbcCalculator,则必须引用API层。然后,您不能从API层引用数据访问层,因为它是一个循环依赖项

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

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


  • 为域/业务层提供单独的项目有一些优势

  • 其他层也可以使用您创建的域/业务类,而无需了解/引用API层及其依赖项
  • 假设您的API层使用AbcCalculator(您在API层中定义了AbcCalculator)。如果您想在数据访问层中使用AbcCalculator,则必须引用API层。然后,您不能从API层引用数据访问层,因为它是一个循环依赖项

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

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


  • 谢谢你的解释!谢谢你的解释!