欢迎来到Heck's Blog,专业承接拿站、企业建站、仿站、网上商城架构、门户网站搭建、空间域名注册、软件定制等项目。关注网络安全,因为专注,所以专业,懂得放弃,才能收获。有事请发邮件至i@heckjj.com,请记住本站网址:http://www.heckjj.com,多谢。
9月21
下面来谈下如何应用设计模式编写易于单元测试的代码
引言

设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述,通过在系统设计中引入合适的设计模式可以为系统实现提供更大的灵活性,从而有效地控制变化,更好地应对需求变更或者按需变更系统运行路径等问题。

单元测试是软件开发的一个重要组成部分,是与编码实现同步进行的开发活动,这一点已成为软件开发者的共识。适度的单元测试不但不会影响开发进度,反而可以为开发过程提供很好的控制,为软件质量、系统重构等提供有力的保障,并且,当后续系统需求发生变更、Bug Fix 或功能扩展时,能很好地保证已有实现不会遭到破坏,从而使得程序更易于维护和修改。 Martin Fowler、Kent Beck、Robert Martin 等软件设计领域泰斗更是极力倡导测试先行的测试驱动开发(Test Driven Development,TDD)的开发方式。

单元测试主要用于测试细粒度的程序单元,如类的某个复杂方法的正确性,也可以根据需要综合测试某个操作所涉及的多个相互联系的类的正确性。在很多情况下,相互联系的多个类中有些类比较简单,为这些简单类单独编写单元测试用例往往不如将它们与使用它们的类一起进行测试有意义。

模拟对象(Mock Objects)是为模拟被测试单元所使用的外围对象、设备(后文统一简称为外部对象)而设计的一种特殊对象,它们具有与外部对象相同的接口,但实现往往比较简单,可以根据测试的场景进行定制。由于单元测试不是系统测试,方便、快速地被执行是单元测试的一个基本要求,直接使用外部对象往往需要经过复杂的系统配置,并且容易出现与欲测试功能无关的问题;对于一些异常的场景,直接使用外部对象可能难以构造,而通过设计合适的 Mock Objects,则可以方便地模拟需要的场景,从而为单元测试的顺利执行提供有效的支持。

本文根据笔者经验,介绍了几种典型的设计模式在系统设计中的应用,及由此为编写单元测试带来的方便。
9月21
        下面来介绍下这几本关于设模式的书。81
       《设计模式:可复用面向对象软件的基础》:这不是本简单的工具书,甚至可以说是有点学术著作的感觉。语言凝练,抽象深刻,很耐读(想一次读懂,可能吗?17  高手可能,我们凡人就...)。对于设计模式不是有一定程度经验的,就不要从这本书开始入门了~_~。

        《设计模式解析》:对设计模式做了一定的推理演示,有一定深度的。这本书,浏览过几次,总觉得不是一个适合入门的书,不知道网上有些书评为什么将其推荐为“最实用的设计模式入门书”。作者想谈的还不只是设计模式这么简单,两个作者甚至还在倡导一种基于模式的分析和设计的方法论。一句话,对学习设计模式新人可以看看本书,但是想理解作者说的很多东西,可能要等一段时间~_~  中文版就不要读了,翻译的有点怪怪的~_~  书中谈到的模式是最经常使用的模式。

        《Java与模式》:没有完整看过,倒是经常翻翻,总体是本工具书,适合入门,也适合有一定经验的。虽然书的头几章谈了一些有关OO原则的东西,但是还是把它归类为工具书。 为什么推荐入门看,一是书中的话不是很抽象(前几章除外),适合入门理解,再者书中的例子和UML图,相信也更适合与入门的人,而且也比较实用。说明:绝对不是把本书归类为入门级别的书,毕竟是中国哥们搞出来的,顶一下~_~

         《Head First Design Patterns》:真正适合入门的书,也非常实用。没有完整看过,闲着的时候翻翻电子版的,真的感觉很好,而且不没有觉得是本单纯的工具书。书中谈到的模式是最经常使用的模式。


9月21
关于单例模式的一些要点:

          1.Singleton模式中的实例构造器可以设置为protected以允许子类派生。
          2.Singleton模式一般不要支持ICloneable接口,因为这可能会导致多个对象实例,与Singleton模式的初衷违背。
          3.Singleton模式一般不要支持序列化,因为这也有可能导致多个对象实例,同样跟Singleton模式的初衷违背。
          4.Singleton模式只考虑到了对象创建的管理,并没有考虑对象销毁的管理。就支持垃圾回收的平台和对象的开销来讲,我们一般没必要对其销毁进行特殊的管理。

多线程的Singleton模式


代码说明:

      1.volatile C#关键字作用,简单来说,编译器编译我们的代码时候,会对代码作一些优化,进而对代码进行了微调,使用volatile关键字就可以避免这个微调。继而严格意义上保证不会产生多线程。更详细的关于volatile 的说明,请看参考资料。
      2.双检查加锁模式。在lock之外和之内,我们做了instance是否为空的检查。这叫双检查。因为同步控制的时间太长了。双检查能够最高效地实现多线程安全的访问。
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]