第2章 组件设计原则
Java阵营一直倡导开源,开源运动如火如荼展开,催生了无数组件。但是,坦率地讲,这些开源的组件中,能够直接拿过来,不做任何改造,就能用于商业软件的构建,满足功能和性能的要求,这样的优秀组件并不多见。因此,核心软件开发者时常面对的尴尬局面是:大量的开源资源,都不满足我的要求。
实际上,组件设计是软件设计开发最精髓所在,凝聚了面向对象、数据结构、设计模式、线程并发同步、网络通信、操作系统等诸多领域的最核心技术,一直是设计开发领域彰显技术水准的最高领地。
一个组件,要想被广泛重用,满足不同系统的使用要求,就要求组件有足够的能力适应不同的应用场合,提供满足需要的功能,并表现出优秀的性能。因此,组件设计过程中,组件设计者要考虑的问题非常广泛而复杂,组件设计者需要具备的知识、技能和经验要求非常高,主要包括如下三个层次的核心能力。
(1)第一层次:编程能力。主要包括:
● 编程语言的熟练使用;
● 数据结构的精准运用;
● 多线程并发、同步的准确理解和实现;
● Socket网络编程技术的全面掌握和运用;
● 数据库概念的精准理解和熟练应用。
(2)第二个层次:设计能力。主要包括:
● 面向对象思想的精准理解和正确应用;
● 设计模式的精准理解和正确应用;
● 优秀的框架、中间件、数据库的深入洞悉和优化能力;
● 数据备份、安全、可维护性等方面的技术知识掌握;
● 设计方案的分析、比较、权衡和抉择。
(3)第三个层次:需求分析能力。主要包括:
● 对客户明确的功能需求进行分析的能力;
● 对客户明确的性能、数据备份、安全、可维护性等方面需求进行分析的能力;
● 推理、提取、归纳客户隐性需求的能力;
● 对需求方案进行分析、比较、权衡和抉择的能力。
每个层次的完成标准,是对本层次内的产出物,可以精确地阐述,为什么一定要这样,而不能采用别的方案或实现的理由。比如,在第二个层次——设计阶段,必须要能精确地说出:这样设计软件的依据在哪里,而且为什么一定要这样设计,而不能用其他的方案呢;这种设计方案与别的设计方案相比较时优势在哪里,不足在哪里;选择这种设计方案的理由在哪里。在深厚的技术和经验积累的基础上,能够横向的对各种方案进行深入的优缺点分析、比较、权衡和抉择,是相应阶段修炼完成的重要标志。
对一个本科毕业生来说,走上工作岗位后,在项目实战中进行学习和积累,到达第一个层次,至少需要2~3年的时间。修炼第二个层次,还需要3~4年的时间。修炼第三个层次,还需要2~3年的时间。
考虑实际工作中,一个软件开发人员经常在一个项目开发过程中,对以上三个层次的相关活动都会参与,相当于三个层次同时进行修炼,因此通常工作经验至少在5年以上才有可能涉足组件设计这个领域。另外,逐步地完善和全面提升,日臻精纯,需要天赋、勤奋、深入的思考和岁月的积累。这也就是,为什么在软件领域,组件到处泛滥,但优秀组件却不多的原因所在。
本章将对组件设计过程中要考虑的核心要素、设计中要遵循的核心原则进行总体阐述,使读者能从总体上掌握如何发现、评判、设计一个优秀的组件。
本章将对目前业界存在的诸多技术争论、误区进行澄清,让读者从所谓的“业界潮流”、教条、“黄金定律”中走出来,真正理解组件设计过程的核心原则。这些核心原则如下:
原则一:精准地解决共性问题
原则二:无配置文件
原则三:与使用者概念一致
原则四:业务无关的中立性
原则五:对使用环境无依赖
原则六:单类设计和实现
下面来详细讲解每个核心原则。