发新话题
打印

敏捷思维:代码验证

敏捷思维:代码验证

要保证架构的动摇和成功,应用代码对架构停止验证是一种实用的手腕。代码验证的中心是测试,特别是单元测试。而测试的基本操作思路是测试优先,它是敏捷方法中非常重要的一项实践,是重构和动摇核模式的重要保障。
面向对象体系中的代码验证
代码验证是保证优秀的架构设计的一种方法,同时也是避免呈现象牙塔式架构设计的一种措施。我们在上一篇动摇化中提到说架构设计最终将会表现为代码的形式,因此使用形式化的代码来对架构停止验证是最有效的。
由于是代码验证,因此就离不开编写代码,而代码总是和详细的言语、编译环境毫不相关的。在这里我们主要讨论面向对象言语,代码示例采用的Java言语。应用面向对象言语来停止架构设计有很多的益处:
首先,面向对象言语是一种更优秀的结构化言语,比起非面向对象言语,它能够更好的实现封装、降低耦合、并允许设计师在笼统层次上停止思考。这些因素为优秀的架构设计提供了条件。
其次,面向对象言语可以允许设计师只关注在框架代码上,而不用关心详细的实现代码。当然,这并不是说非面向对象的言语就做不到这一点,只是面向对象言语的表现更优秀一些。
最初,面向对象言语可以停止很好的重用。这就意味着,设计师可以应用原有的知识、原有的软件体系,来解决新的成绩。
此外,应用Java言语,还可以获得更多的益处。Java言语是一种面向接口的言语。我们知道,Java言语自身不支持多重集成,一切的Java类都是从Object类承继上去的。这样,一个承继体系一旦确定就很难再更改。为了能够到达多重承继的灵敏性,Java引入了接口机制,使用接口和使用笼统类并没有什么不同的中央,一个详细类可以实现多个接口,而客户端可以通过申明接口类型来使用,如上面这样:
  List employees=new Vctor();
如果需要将Vctor换成LinkedList,那么除了上面的创立代码,其它的代码不需要再做更多的修改。而Vctor这个详细类除了实现List这个接口以外,还实现了Cloneable、Collection、 RandomAccess、Serializable。这说明除了List接口之外,我们还可以通过以上所列的接口来拜访Vector类。因此接口承继能够成为类承继的补充手腕,发扬十分灵敏的作用。同时又避免了多重承继的复杂性。但是接口中只能够定义空方法,这是接口的一个缺陷。因此在实践编程中,接口和笼统类通常是一同使用的。我们在Java的java.util包中看到Collection接口以及实现Collection接口的AbstractCollection笼统类就是这方面的例子。你可以从AbstractCollection笼统类(或其某个子类)中承继,这样你就可以使用到AbstractCollection中的缺省代码实现,由于AbstractCollection实现了Collection接口,你的类也实现Collection接口;如果你不需要应用AbstractCollection中的代码,你完全可以自己写一个类,来实现Collection接口(这个例子中不太可能发作这种状况,因为工具类的重用性已经实现设计的非常好了)。Java中有很多类似的例子。Java言语设计并不是我们讨论的重点,更加深入的讨论可以参看专门的书籍,这里我们就不作太多的介绍了。
以上花了一些篇幅来讨论面向对象设计和面向接口设计的一些简单的预备知识。这些知识将成为代码验证的基础。接口和架构
这里的接口指的并不是Java中的Interface的概念,它是狭义的接口,在Java言语中详细表现为类的公无方法或接口的方法。在COM体系或J2EE体系中还有类似但不完全相反的表现。对于一个零碎的架构来说,最主要的其实就是定义这些接口。通过这些接口来将零碎的类联络在一同,通过接口来为用户提供服务,通过接口来连接外部零碎(例如数据库、遗留零碎等)。因此,张银匠我们为了对架构停止验证的要求,就转化为对接口的验证要求。
对接口停止验证的基本思路是保证接口的可测试性。要保证接口具有可测试性,首先要做的是对类和类的职责停止剖析。这里有几条原则,可以提高接口的可测试性。
1、 封装原则
接口的实现细节应该封装在类的外部,对于类的用户来说,他只需要知道类发布出的公无方法,而不需要知道实现细节。这样,就可以根据类的共无方法编写相应的测试代码,只需满足这些测试代码,类的设计就是成功的。对于架构来说,类的可测试性是基础,但是光保证这一条还不够。
jiyizhen-buy.com颈椎保健枕太空记忆枕 igerl.com歌瑞尔内衣

TOP

发新话题