4 回答

TA贡献1813条经验 获得超2个赞
我觉得这确实是系统设计问题,一般系统分层原则是,越是底层越细化,例如数据库的DAO基本是针对单个表的,越往上层越抽象化,比如某个Service可能会注入多个DAO来实现某个业务。
你提的问题应该就是Service没有按照职责划分清楚,比如StudentService应只能实现Student相关的业务,其它的业务应该不归它管理,因此在StudentService里面不应该调用ClassService或者SchoolService。
就如你所言的解决方案,Service层本身根据不同的业务职责是可以分成多个层,只要确保在同一层里面的Service不会互相引用(也不应该引用),复杂的业务需求应当由更上层的Service提供。
三层设计只是一个指导方针,你可以扩展成n层,这依赖你业务需求的复杂度。

TA贡献1869条经验 获得超4个赞
首先,对于Spring中的循环引用是不会有问题的,而且循环引用在很多时候也是不可避免,很多设计模式实际上都存在着循环引用的情况。
其次,对于像StudentService只调用StudentDao的情况只是理想情况下出现的,实际场景下,一个Service肯定会调用其他Service来完成自身功能。若不希望存在循环引用的情况,那只能让Service依赖Dao(因为Dao之间是不会存在互相依赖的情况),但这样做会造成大量的代码冗余,粒度也过细。
最后,在业务实现中,循环引用是正常的,对于Spring的管理、事物的处理来说都不会产生问题。
添加回答
举报