MVC 实践。另一个服务中的服务

ser*_*hii 5 java model-view-controller service spring spring-mvc

Service1注入Repository1. Service2注入Repository2.

假设两种不同的场景:

1)Service2需要从Repository1. 应该Service2注入Service1还是Repository1当它们都提供各自的get()方法时?

2) 最后的某些方法Service1应该从Service2. 它是一个不好的做法,注入Service2Service1这样的需求呢?使用 AOP 等事件侦听技术来满足此类需求是否是一个好习惯?

vin*_*ine 7

当我们谈论最佳实践时,这里有许多因素需要考虑。

作为一个好的开始,尝试理解SOLID原则的概念。通常,拥有多个具有非常专注的角色的类来调用另一个类而不是将所有功能组合在一个类中是好的。高可重用性和最少的代码重复,从而提供可维护性。

对于场景 1.)

如果方法中定义的业务代码与其他服务所需的业务功能相同,那么让一个服务调用另一个服务是完全没有问题的。这遵循DRY原则,没有冗余代码。

但是,如果它只是一个没有进一步业务逻辑的简单调用,那么直接从服务调用 Dao 而不是调用不同的服务来为您执行此操作也完全没问题。特别是如果这两个服务无论如何都在同一个模块中,除非您想抽象它,否则没有充分的理由让另一个服务成为明显简单的单行代码的桥接类,但在您的情况下,它只是一个简单的 get 调用.

对于场景 2。)

但要考虑的另一件事是模块化依赖方向。如果每个服务相互调用,你的设计可能会出现问题,尽可能避免对不同模块的循环依赖,因为这可能导致意大利面条式代码,最好将相同的代码提取到可以共享的公共模块上声明的不同类中通过许多模块。

最后一点,正如 Robert Martin 所说,您将无法在一轮中立即编写出最干净的代码。最好的代码是通过不断的重构和代码清理来打造的。引用罗伯特·马丁的话,

童子军有一条规则:“始终让露营地比您发现时更干净。”