问题描述
各位高手,我在看《Ajile Java Crafting Code With DDT》中的setup小节的时候看到了一句话,不是很理解,就请假各位,原文是这样“Even though you could create a constructor and supply common initialization code in it, doing so is considered bad practice. The preferred idiom for test initialization in JUnit is to use the setUp method.”,为什么在构造函数里面初始化不是很好呢?请教各位帮忙解惑。先谢谢了,在前几节,作者也提到了“ you can have more than one constructor; initializing at the field level saves you from duplicate initialization code in each constructor.”,但是构造函数可以互相调用,就没有作者说的那种情况了。
解决方案
也没有什么不好,事事无绝对,只是遵循一定的规则可以更多的避免将来可能的错误理论上来讲,构造函数只是让你构造一个对象,从这个职责上来讲的话,只要构造了这个对象就可以了。而使用这个对象的人也假定你在里面只做了简单的初始,没做什么复杂的东西。主要的其他 的动作放到其他函数里执行最好。要 理解这个比较困难,从面向对象的角度来讲的话,类提供了很多的函数,这些函数值应该做这些函数规定的事情,而且值应该做这个函数规定作的事情,这样才能在协议的基础上而不是在实现的基础上设计系统。构造函数也是这样的,从协议层次上来讲,构造函数就是做初始化相关东西的,不应该做其他的东西。你如果要打开 数据库,最好加一个明确的方法,这个方法用来打开数据库。这样从协议的层次上来讲变得完全了,你从构造函数里搞得话,缺少了数据库打开的操作,这样的类看起来不是很好。还有,在设计类的方法时,操作尽量的更小颗粒,就是把一些操作尽量分解成多点方法,这样给用户提供了更好的可控性。当然也曾加了使用的麻烦性,这样 可以通过一个更大的方法来实现。看起来复杂了,但是做出来的类比较好用。也比较健壮。