Java程序设计之——代码耦合性与包的结构
2015年07月16日


问题和分析:

    如下,一种 常见的 包结构

 |--x.y.service             -------存放service接口(interface)

 |--x.y.service.impl    -------存放service接口的实现类

这种设计,从代码结构上来说,是下层(impl层)的代码 依赖于上层(service层)的代码,这样有个好处:代码耦合性低,我们可以把下层代码移除,而上层代码不会受到影响


但是,在某些时候,我们往往违反了这个规则,我们经常在上层 调用下层的代码。比如说下面这个例子:

 |--x.y.xml                -------存放xml相关工具类

 |--x.y.xml.praser    -------专门存放20多个xml解析器,供上层xml工具类中调用

从常理来说,x.y.xml包 是一个对外提供服务的包,而x.y.xml.praser是在 x.y.xml 内部使用的包。所以说这样设计是合理的。


总结:

   参考Spring、Apache等优秀Java开源项目的源码,我们发现,上面所说的两种情况都是存在的,但是第二种情况出现得比较少,仅在一些特殊的情况下才这样用。

   结论: 在同一个 业务package 下,直接隶属于该package的代码 应该 尽量少的引用 其子package的代码,也就是说,顶层package一般存放一些接口、公用类等相对独立的代码(不会引用子package的代码),但是在某些情况下,例如某些部分要单独放在子package中,而且在父package中要引用这些代码