@
vanishxiaoma #6 如果 Service 层是独立设计的(至少可以利用 Mock 脱离上下层进行自主单元测试),那么这些共用的代码,可以抽取成 Service 层内部的独立类——这些类只能被常规 Service 调用。(实际上,Controller/Action、Dao 层受限于框架只能是固定的单类模式,但从来没有人说过 Service 层也必须是单类模式。)
另外一种方式是在 Service 层和 Dao 层之间插入一层可选的 LowerService 层。
以上两种方式,都很容易步入另一个坑——CommonService Hell。
Controller/Action—Service—Dao,这是对应贫血领域模型的典型架构,它当初因为降低了 Java 的门槛而发扬光大,它之后因为暴漏的各种 Hell 以及面向过程编程的嫌疑而被多个(国外的)大佬批成了 SHI。现在研究它没啥意义,小项目建议 Controller/Action+SQL 模板(例如 Spring-Data-Jdbc ),大项目直接上领域模型设计。