java如何使用spring的分层架构,并且仍然遵循面向对象的结构?
我学习了spring及其分层结构(控制器、服务和dao)
@Controller("userController")
@service("userService")
@Transactional( propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, readOnly = true)
@Repository("userDAO")
现在我很困惑如何利用良好的OOPS实践(比如this)和这些分层结构来创建一个大项目(现实世界中的业务逻辑比通常提供的示例应用程序更复杂)。我还想使用这些spring事务和框架提供的其他功能。 能否请一些人帮我解决这个问题,或者参考开源项目来澄清我的疑问
# 1 楼答案
简而言之
当代码变得庞大和复杂时,分层架构只会简化代码的可维护性和一致性
要记住的事实是,在执行之前,要进行适当的软件设计
细节
下面我将尽我所能为本次讨论提供一个ERP应用程序的示例。希望ERP是一个足够的大项目来查看业务逻辑的复杂性
下面的描述适用于任何需要了解和使用Spring(或任何其他框架)中的分层项目结构的开发人员
但请注意,这些不是要遵循的规则,而是要利用的最佳实践。:)
1。数据访问层-模型/域对象
它包含实际表到类的映射
2。数据访问层-存储库
它只包含简单的CRUD到带有
SELECT, INSERT, UPDATE and DELETE SQLs
的数据库。您可以在Spring中使用repository模式和Spring Data JPA
关键提示:除非您的逻辑是高度数据密集型的,否则不要在此层中编写任何复杂的逻辑。
在这种情况下,您可能需要编写一个或多个函数来执行复杂的查询语句。(最好是在
JPQL
3。服务层
这是您应该放置复杂业务逻辑的地方,它涉及多个未连接(而非子-父)域模型。这些将在Web控制器和Rest API控制器中重用
因此,为了保持一致性并实现安全性,我希望所有的业务逻辑(即使是在域模型中编写的)都被封装在这一层
如果这些逻辑应该与其他模型逻辑一起执行,那么这些逻辑也应该在服务层内按顺序调用。例如
关于复杂业务逻辑的杂项示例
然后,这可以通过创建一个名为
SupplyChainService
的服务来实现,该服务使用Spring AOP绑定到CustomerOrderService.ReleaseCustomerOrder
。在微服务设计中,这可以通过Supply chain
域微服务发布到队列的事件来完成,并被Customer Order
域微服务消费4。控制器
控制器可以分为两类,即:Web控制器和REST控制器。不应在该层中实现任何业务逻辑,因为在Web和API级别调用时可能需要相同的逻辑
感谢SO社区向我展示了我在这个回答中没有涉及OOP原则的领域
编辑
当微服务不是太主流时,这是一个答案。虽然它回答了OOP的概念,但也考虑了基于CQRS的设计,因为它在现代基于微服务的体系结构中更为常见。无论采用哪种方式,无论使用何种软件体系结构模式,都可以合并OOP概念
# 2 楼答案
您试图理解两个可以相互操作的不同概念
分层架构
分层架构是该行业的架构风格之一。在这种情况下,我们有单独的层来做特定的逻辑。例如,我们有表示层、业务层和数据服务层。这被称为应用程序的水平切片。还有其他体系结构样式,比如面向服务/基于组件的体系结构,其中应用程序是垂直切片的
假设您有自动预订流程。通常,如果你采用分层架构设计(水平切片),那么我们有不同的层来完成所需的工作。但是,当涉及到垂直切片时,我们会识别应用程序的不同实体,如预订、客户管理、资金管理。我们将实现这些组件,它们相互通信以构建我们的预订应用程序。这里需要记住的一点是,内部组件可以搁置相同的分层架构
面向对象的概念
OOPS概念帮助您以面向对象的方式设计应用程序。一旦确定了架构风格,就必须以易于维护的可扩展方式实现应用程序。因此,它们采用了不同的实现方法。哎哟,真是太棒了。它提出了一些设计原则,帮助您更好地实现应用程序
见SOLID