Service 层和 Dao 层有必要为每个类都加上接口吗?
我 整 理 了 支 持 S e r v i c e 层 和 D a o 层 需 要 加 上 接 口 的 理 由 , 总 结 下
来 就 这 么 三 个 :
可以在尚未实现具体Service逻辑的情况下编写上层代码,如Controller对
Service的调用
Spring默认是基于动态代理实现AOP的,动态代理需要接口
可以对Service进行多实现
实 际 上 , 这 三 个 理 由 都 站 不 住 脚 !
先 说 说 第 一 个 理 由 : 「 上 层 可 以 在 下 层 逻 辑 没 有 实 现 的 情 况 下 进
行 编 码 」 ! 很 典 型 的 面 向 接 口 编 程 , 对 层 与 层 之 间 进 行 了 解 耦 ,
看 起 来 好 像 没 有 问 题 。
这 种 开 发 方 式 适 合 不 同 模 块 之 间 是 由 不 同 的 人 或 项 目 组 开 发 的 ,
因 为 沟 通 的 成 本 比 较 大 。 同 时 避 免 由 于 项 目 组 之 间 开 发 进 度 的 差
异 而 相 互 影 响 。
不 过 让 我 们 回 想 一 下 , 在 一 般 项 目 开 发 里 面 , 有 多 少 项 目 组 是 按
层 来 切 分 开 发 任 务 的 呢 ? 实 际 上 , 大 部 分 的 项 目 都 是 按 照 功 能 划
分 的 。 即 使 是 现 在 前 后 端 分 离 的 情 况 , 单 纯 的 后 端 开 发 也 是 按 照
功 能 模 块 进 行 任 务 划 分 , 即 一 个 人 负 责 从 C o n t r o l l e r 层 到 D A O
层 的 完 整 逻 辑 处 理 。
在 这 种 情 况 下 , 每 一 层 都 先 定 义 一 个 接 口 , 再 去 实 现 逻 辑 , 除 了
增 加 了 开 发 人 员 的 工 作 量 ( 当 然 , 如 果 代 码 量 计 入 工 作 量 的 话 ,
那 开 发 人 员 应 该 也 不 是 太 排 斥 接 口 的 ! ) , 实 际 没 有 任 何 用 处 。
如 果 开 发 人 员 想 在 下 层 逻 辑 没 有 完 成 的 情 况 下 , 先 开 发 上 层 逻 辑
, 可 以 先 编 写 下 层 类 的 空 方 法 来 先 完 成 上 层 的 逻 辑 。
这 里 推 荐 一 个 个 人 比 较 喜 欢 的 开 发 流 程 , 自 上 向 下 的 编 码 流 程 :