这个就跟Service直接用Java类还是用Interface/Implementation一样。关键是你自己认为是否合理,团队是否有严格要求。
为了说明这个问题,我在网上找了一些图。
web层,业务层,持久层,总体上是这样的关系:
再稍微详细点,是这样:
有一篇文章专门讲到这个2.4. Application Layeringterasolunaorg.github.io
下面简单总结一下这篇文章的思想。
在Spring架构里,是这样:
圆形代表Interface,长方形是Class
如果再考虑进去依赖注入,是这样:
上面这些图都没有直接告诉你Controller可以调用Repository(DAO)。甚至还能给出这个调用参考表:你发现了吗?Controller调用Repository是个X,就是不允许。而且Service调用Service都是警告。
Service调用Service会带来相互依赖问题,事务也不好处理。
原文对上面这个表有一段补充说明:It may be difficult to follow the above rules at the initial phase of application development. If looking at a very small application, it can be created quickly by directly calling the Repository from Controller.
翻译一下:
在应用开发的初始阶段,很难遵循上面的规则。如果是一个很小的应用,让Controller调用Repository会更加快速便捷。