工程管理系统工程规划一般地,开发一个产品或项目时,需要对整个应用程序有一个整体上的或者说全局上的规划。比如,层次划分和模块化。按分层进行组织的设计结构中,只允许上层的程序引用下层的程序,而不允许出现下层的程序引用上层的程序,依赖关系要做到单向化(偏序依赖)。另一个概念模块化,主要是指把程序组织成多个逻辑概念相对独立的单元,便于维护和管理。这些单元在物理上的体现主要是程序工程(也有叫作项目的,英文表示是Project)。单元的划分要遵从高内聚低耦合的原则进行。单元之间的依赖关系也必须是单向的,并且不与系统整体上的层次关系产生冲突。以上内容主要在开发周期中的设计阶段完成,还有一些其它内容,概括起来,需要明确的主要有以下一些内容:系统的层次结构及工程存放目录组织构成系统的所有工程的清单,包括各工程的类型、所处位置、内容与其它说明等工程之间的依赖关系图,包括依赖的第三方组件依赖的第三方组件或类库的清单,包括名称、版本、官方网站地址、其所依赖的其它组件和类库,以及详细的修改记录(如果有修改的话)工程与配置管理Java各类工程(Project)都包含特定的内容,依工程类型(最常见的有类库、控制台程序和WEB应用程序三类)不同,内容也会有不同,但一些基本内容是都有的,比如工程文件、Java源程序文件、二进制输出目录等。我们利用配置库来达到统一管理和相互协作的目的。但Java工程中,并不是所有的内容都需要或者说适合纳入配置库,比如说二进制输出目录,它们只是一些临时生成的数据或文件,并不需要持久保留,还有一些文件是用户使用的IDE或构建工具存储的特定文件等,同样不应该签入配置库。配置库处理原则是,只把需要及合适的内容签入配置库,其它内容一律不入库,以避免不必要的“垃圾”内容和对他人的干扰。Java工程中可能出现的,一定不要签入配置库的目录及文件,包括但不限于以下所列:maven相关otarget/Eclipse相关obin/o.settings/o.projecto.classpathIDEA相关o.idea/o*.ipro*.imlo*.iws临时性文件o*.logo*.cacheo*.diffo*.patcho*.tmp系统相关o.DS_StoreoThumbs.db代码风格命名风格在使用Java语言编程的时候,尽量坚持以下的原则进行命名:1.名称尽量要直接表明其含义,并且要使用英文单词表述,尽量避免使用汉语拼音命名。名字的意思清楚比长度更重要,应该与场景、系统的逻辑组成或物理组成以及为人熟知的概念相对应,而不是与技术或架构相对应;2.除一些约定俗成的单字母变量(如i,j,k,v,x,y等),禁止使用单字母变量。在使用单字母变量时,也仅限于表示约定的含义,如i,j,k表示循环;v表示取值;x,y表示两个操作数;3.命名时可以适当使用单词缩写,但一定要含义明确,如exec;4.在命名的过程中要使用语义上有意义的名字,而不要使用编程语言特有的关键字。如:getLength()比getInt()要好得多;5.类命名尽量使用名词性短语,如:FileCreator,HotelListManager,TaskWorker等。6.方法命名一律以小写字母开头,命名时尽量不超过3个单词,第一个单词后的每个单词首字母需要大写。执行操作命令类型的方法命名时一般用动词或动词短语命名,如Executor.execute()等;执行转化命令类型的函数命名时一般用toXxx(),parseXxx(),valueOf()的形式命名,如:Object.toString(),Integer.parseInt(),Enum.valueOf();7.类成员的命名尽量避免再使用类名(包括缩写形式)做前缀,例如User.getUserId()命名为User.getId()更加合适;8.避免使用Java预定义的类型名称命名自己的类型。代码组织包尽量将功能相近或同属一个性质的类型放在同一包中(同属一个性质特指util或类似的包,并不是指controller,service,model等),这样在开发的时候,就可以避免导入过多的包,且减少查找适用于特定任务的正确类型时所必须检查的包的数量,也可以避免不相干内容之间的相互干扰。从一定程度上来说,就是包级别的高内聚、低耦合。类Java的类型分为引用类型和值类型两类(正因为有值类型的存在,所以Java并不是纯面向对象的语言)。除Java预定义的8个基本类型是值类型之外,其它所有类型都是引用类型。引用类型在堆中分配,内存管理由垃圾回收器处理。值类型在栈上或以内联方式在堆中分配。通常,值类型的内存分配和释放开销更小,所以,只要能够采用值类型的地方,应优先考虑值类型(只有当值类型遇上Java5引入的泛型时,才适合使用其相对应的包装类型)。然而,如果是在有大量的装箱或拆箱操作的情况下,值类型的表现就不如引用类型了。以下规则中,不严格区分类、接口或枚举等概念,统称为类。1.类名与文件名应该保持一致;2.类声明必须处在某个包中,禁止在缺省包中声明类;3.在一个类文件中,除内部类之外,应该尽量只定义一个类,建议避免在一个文件中定义多个类。合适的情况下,可以考虑定义为内部类,且优先选择静态嵌套类;4.只在需要公开给其他人使用的类前加上public关键字,内部使用的类使用访问级别更低的关键字来修饰;5.不需要再被继承的类前加final关键字;6.设计上一旦初始化便不打算再被改变的内容,一律用final关键字修饰。接口与狭义上的类相比,接口具有其自身的独特属性,以下规则有助于正确设计接口:1.除公开API,应优先考虑定义类,而不是接口。因为在以后的版本调整中,可以安全地向类添加新成员,而对于接口,则只有修改很多代码(可能有多个类实现了接口)才能添加成员,影响面很宽;2.接口中定义每一个方法时要合理地设计会抛出的异常;3.避免使用标记接口(没有成员的接口),可以使用自定义属性(Annotation)作为类型标记的方式;4.请提供至少一种接口实现的类型,这样有助于确保正确设计和顺利实现接口;5.尽量不要向以前提供的接口添加成员,如果接口的交付定义要求更多成员,则可以考虑定义新的接口扩展已有接口并添加适当成员。枚举枚举一般用于表示一组具有特定取值范围的常量,所以其所有属性都必须是不可变的,枚举的定义中不能提供任何可以修改其任何状态的途径。Java的枚举在本质上是类,属于引用类型,可以考虑充分利用其多态特性。1.一定要为枚举提供一个“零”值。通常情况下,“零”值项被命名为None、Unknown或Invalid是合适的。如果不合适,请根据具体情况把“零”值定义为最合适的项(一般是用作默认值的项);2.构造函数必须是私有的;3.所有字段都必须是final的。字段字段用于保存状态数据。实例字段用于存储对象的状态;静态字段用于表示某个共享状态,特殊的,常量(或不可变字段)适合表示一些固定值或不变数据。在绝大多数情况下,类的所有的实例字段都应是对外不可见的;而静态字段应尽量是常量(或不可变字段)。下面的规则有助于正确设计和使用字段:1.不提供在实际上是公共访问级别的实例字段和可变的静态字段;2.对不会更改的常量(或不可变数据)使用常量字段(staticfinal)。方法1.尽量避免写出超过50行的方法;2.类应该只对外公布必需的方法,尽可能的隐藏内部实现,在声明方法时应该合理的考虑private、protected、default等可见级别。参数与返回值1.实际上对外可见的方法的参数和返回值类型应使用接口,而不是某一个具体的实现类。如:使用List,Map会比使用ArrayList,HashMap更合适;2.参数的个数建议不超过6个。当多于6个时,应考虑是否把一部分或全部参数包装成一个具有特定含义的对象更合适;3.一定要验证实际上对外可见的方法的参数,如果验证失败会导致抛出异常,则应该在方法注释中说明在何种情况下会抛出何种异常;4.如果调用方几乎总要将输入放入数组,则不要使用varargs形式的参数。局部(本地)变量1.尽量在第一次使用局部变量的前一行进行声明(使用时声明);2.保证局部变量有最小的作用域(作用域最小化);3.每一个局部变量,只行使单一的职责,尽量避免一个局部变量,连续承载不同含义的数据。语句1.一行只写一条语句,不允许把多条语句(即使很短)写在一行中;2.尽量避免写过长的代码行(为了避免还要动用左右滚动条才能看到一行代码的完整内容);3.尽量避免编写连续的对象调用的语句(如map.get(key).doXxx()),如果需要在对象上获取对象后继续操作,要确保或检查对象不是空引用,以避免产生空指针异常;4.尽量避免编写整合的自增/减操作。注释Java中的注释主要有两类,一类是文档注释,另一类是代码注释。文档注释指的是程序对外公开的所有内容的使用说明或功能描述及相关细节阐述,也可以被叫作API注释。代码注释主要是指文档注释之外的用于说明代码执行原理或所表示的信息等内容的相关说明,一般出现在局部(字段上的说明,或方法内部的说明等)。两类注释的最大区别在于,文档注释可用于生成程序的API说明文档,可以脱离源代码独立使用;而代码注释只对特定的源代码进行必要的说明,一般只出现在源程序代码中,不单独出现。更新代码时要保持注释同步更新。文档注释文档注释的语法结构支持多行注释内容,起始标记为/*,结束标记为/(均不含引号)。注释内容与起始标记以及注释内容和结束标记间都保留一个空格,所有的注释行上下相连,中间不穿插其它内容,且整个注释内容直接出现在被注释元素之上,注释与被注释的元素之间也不穿插其它内容(Java5引入的Annotation不算)。关于文档注释的编写,可参考HowtoWriteDocCommentsfortheJavadocToolorJavadoc.代码注释1.代码中应该适当增加注释,注释和空行都是程序代码的重要组成部分。注释要能够说明程序的含义和算法,简明扼要,但不要过多过滥;2.注释的缩进要与代码对齐;3.对注释要做严格地拼写检查,保证措辞、语法、标点符号都正确地使用,保证语句通顺,易于理解,避免产生歧义或混乱;4.一目了然的语句不加注释。格式给出代码格式的,请严格按照给定格式编写相关的代码。尤其是其中的花括号与空格,不能被省略或不写。换行符统一使用Unix换行符('\n'),不允许使用其它平台相关的换行符。字符编码统一使用UTF-8,不允许使用其它字符集。缩进与空行1.缩进以4个英文半角空格字符为合适的宽度,严禁4个空格符宽度以外的缩进长度;2.代码中应该在合适的位置留有空行,空行也是程序代码的重要组成部分,空行用于分隔代码内部的逻辑块,分割类的各个成员,以一行为佳;3.在运算符和操作数之间保留一个空格(单目运算符可例外)。花括号配对1.左花括号({)与代码块起始语句或关键词在同一行,且括号前保留一个空格;右花括号(})独占一行,并和括号外的代码对齐;2.花括号中只有一行代码的时候,也保留花括号。分支语句if-else//onlyifif(condition_expression){statements;}//if-elseif(condition_expression){statements;}else{statements_otherwise;}//multi-branch1if(condition_expression_1){statements_1;}elseif(condition_expression_2){statements_2;}elseif(condition_expression_n){statements_n;}else{//optionalstatements_otherwise;}//multi-branch2if(condition_expression_1){statements_1;returnresult_1;}if(condition_expression_2){statements_2;