6、包的命名与划分

(一)使用Java包的目的

在了解做一件事之前,需要了解做这件事的目的。而使用Java包的目的大概如下:
1    对类进行归类,便于开发查找。
2    将软件在代码层面上模块化,提升可测试,可维护性。
3    将软件在代码层面上层次化,提升可读性,层次分明

(二)包的命名

要梳理包的依赖关系,首先我们要把握包的命名规则,一旦名字取的不好。在梳理包依赖关系时,便各种纠结。

Java的包是多个类的集合。包的命名,或以独立功能为准,或以层次划分为准。

(三)命名与依赖关系

项目中以独立功能命名的包,往往倾向被其它包依赖,而不能依赖其它包。
项目中以层次划分的包,往往倾向于向下依赖,而不能依赖于上层包。
总的来说,“包依赖关系体现出软件层次划分(竖向),功能模块划分(横向)”。

(四)获取代码中的包依赖关系

a.使用Java编译报错特性:同事通过Eclipse工具,对依赖包进行“refrector”操作(不勾选“update reference”选项),查看编译时的其它包报错,这样去确定哪些包依赖此包。从而逐个通过画图工具把包依赖关系绘制出来。(注:这种方式比较取巧,幸亏项目中的包并不是很多,同事花了30分钟就搞定了)

b.使用Eclipse插件modelgoon:http://www.oschina.net/p/modelgoon。利用此工具可以方便的导出包依赖关系。(注:同事觉得非常简单好用)

(五)对“单向依赖”的追求

从包依赖关系图中,通过箭头可以清晰的看到:一个包被哪些包依赖,而这个包又依赖哪些包。一般呢,一个包更倾向于“被单向依赖”,这意味这个包是可独立,可维护。对于软件测试来讲,单向依赖的包更容易进行单元测试。额外的,如果此包被广泛使用,则更多会将该包作为一个开发组件,并以一个独立项目的方式来对其进行维护。

(六)消灭“循环依赖”

“循环依赖”是指两个包之间互相依赖。消灭“循环依赖”有以下三种方法:
1  拆迁法。
A包的某些类或某些方法规划不合理,应该将其放在B包或者放在C包。
2  合并法。
B包所包含的业务属于A包的范围。将B包作为A包的子包。
3  依赖于接口法。
A包依赖B包,B包依赖A包的特定函数方法。这样可以通过依赖于抽象,来执行包与包之间的解耦。

(七)附转:包划分的几个小原则:

1  一个包要么包含独立的功能,要么代表某层的功能。否则包的划分就没有意义,且查找起来很混乱。

2 某类的子类。(比如接口或者虚类不同的实现)应当单独放到某个包中。

3 假设A包依赖B包,那么B包不应该依赖A包。例如不应当在B包中出现包含A包中类的接口或属性。如果必须增加接口,则应当使用普通类或者B依赖的包中的类组织信息。

否则提取B包中的功能时,会牵扯出不需要的A包。

4 如果A包,B包均依赖于C包,则包c不应当为A或B的子包。

6、Java包的命名与划分的更多相关文章

  1. Java包名命名规则

    1.  sun公司建议java包的命名规则为域名的倒写. 比如:sun公司www.sun.com 就用该是com.sun.www 2. indi : 个体项目,指个人发起,但非自己独自完成的项目,可公 ...

  2. Java包名命名规则(转载)

    转载自:http://lilinhai548.blog.163.com/blog/static/5847332920155132151359/ 鸣谢原作者  学习Java的童鞋们都知道,Java的包. ...

  3. java包名命名规范

    Java的包名都有小写单词组成,类名首字母大写:包的路径符合所开发的 系统模块的 定义,比如生产对生产,物资对物资,基础类对基础类.以便看了包名就明白是哪个模块,从而直接到对应包里找相应的实现. 由于 ...

  4. Java包的命名规则

    按照惯例,包申明遵循特定的格式.虽然不是严格要求的Java语法,如果不遵循格式要求,大多数的Java认为你是不懂Java. 从右到左的顺序是: 1.systaxExample表明包的本地名称. 2.e ...

  5. Java包的命名规范

    indi : 个体项目,指个人发起,但非自己独自完成的项目,可公开或私有项目,版权主要属于发起者. 包名为indi.发起者名.项目名.模块名*.*.* pers : 个人项目,指个人发起,独自完成,可 ...

  6. java包名命名规范[【转】

    indi : 个体项目,指个人发起,但非自己独自完成的项目,可公开或私有项目,copyright主要属于发起者. 包名为“indi.发起者名.项目名.模块名.……”. pers : 个人项目,指个人发 ...

  7. java 包的命名规范

  8. 夯实Java基础系列5:Java文件和Java包结构

    目录 Java中的包概念 包的作用 package 的目录结构 设置 CLASSPATH 系统变量 常用jar包 java软件包的类型 dt.jar rt.jar *.java文件的奥秘 *.Java ...

  9. Java文件和Java包结构

    Java中的包概念 Java中的包是封装一组类,子包和接口的机制.软件包用于: 防止命名冲突.例如,可以有两个名称分别为Employee的类,college.staff.cse.Employee和co ...

随机推荐

  1. Oracle ASM数据库故障数据恢复过程

    一.故障描述 ASM磁盘组掉线 ,ASM实例不能mount.ASM磁盘组有4个500G的磁盘组成,数据库和ASM软件为10.2.0.1,急需恢复oracle数据库.二.故障分析   分析组成ASM磁盘 ...

  2. 老李分享:持续集成学好jenkins之Git和Maven配置

    老李分享:持续集成学好jenkins之Git和Maven配置   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...

  3. Vue.js 学习笔记 一

    本文的Demo和源代码已放到GitHub,如果您觉得本篇内容不错,请点个赞,或在GitHub上加个星星! https://github.com/zwl-jasmine95/Vue_test 以下所有知 ...

  4. Myeclipse快捷键以及使用技巧大全-来自网络

    1. 打开MyEclipse 6.0.1,然后"window"→"Preferences" 2. 选择"java",展开,"Edi ...

  5. C#对文件操作(基本的读写以及压缩和解压)

    主要是针对单个文件进行读写操作和压缩操作:用到的主要C#类有FileStream.FileInfo.StreamWrite.StreamRead.GZipStream. 字符数组和字节数组的转换: ] ...

  6. linux mail命令详解

    用程序发送邮件有3种方式,分别是: 1.模拟http请求邮件服务商网页实现邮件的发送 2.如果邮件服务商开通了smtp服务,那么可以通过smtp协议通过邮件代理服务商发送邮件 3.自己部署邮件服务器, ...

  7. 浅谈echo、print、var_dump()、print_r()的区别

    1.echo 和 print 的区别 共同点:首先echo 和 print 都不是严格意义上的函数,他们都是语言结构;他们都只能输出 字符串,整型跟int型浮点型数据.不能打印复合型和资源型数据: 而 ...

  8. PHP 魔术方法 __call 与 __callStatic 方法

    PHP 魔术方法 __call 与 __callStatic 方法 PHP 5.3 后新增了 __call 与 __callStatic 魔法方法. __call 当要调用的方法不存在或权限不足时,会 ...

  9. Linux - 进程调度算法

    进程调度: 无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数.这将导致它们互相争夺处理机.另外,系统进程也同样需要使用处理机. 这就要求进程调度程序按一定的策略,动态地把处理机分配给处于 ...

  10. Java 设计模式(四)-工厂方法模式 (FactoryMethod Pattern)

    1     概念定义 1.1   定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 1.2   类型 创建类模式 2     原理特征 2.1   类 ...