锁定老帖子 主题:如何TDD,我对TDD的疑问
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-08-14
看大家说的越来越多,感觉自己需要好好充电了。
关于敏捷方面的认识确实太肤浅了。 似乎我得转变下思想。 大家推荐几本书吧。希望是又小又薄的,因为砖头书总看不完:( |
|
返回顶楼 | |
发表时间:2006-08-14
hongliang 写道 gigix 写道 一个参数应该符合什么条件(例如不为null,不为空字符串),要么主调方检查,要么被调方检查,这是接口契约的一部分,要弄清楚的。如果两边都在检查,第一是重复代码,第二是契约弄不清,叫别人看了你的代码不能肯定到底应该怎么去用一个东西。
gigix说的对,这也正是契约的作用。我比较倾向于主调方检查,被调方尽可能地不要分心去想20%的参数错误情况,只要默认所有的参数都正确,集中精力完成该完成的事情就行叻,不然写起来要烦死。 我比较倾向于被调方检查,一则,每个人要保证自己的代码的健壮性,二则,一个方法通常都会被多处调用,如果主调方检查的话,冗余代码更多,而且一旦检查逻辑发生变化,对应起来更烦! |
|
返回顶楼 | |
发表时间:2006-08-14
jkit 写道 我比较倾向于被调方检查,一则,每个人要保证自己的代码的健壮性,二则,一个方法通常都会被多处调用,如果主调方检查的话,冗余代码更多,而且一旦检查逻辑发生变化,对应起来更烦!
欢迎一起讨论这个问题!我的观点是对于library级别的API,被调方检查参数是必须的,因为library必须要保证自身的健壮和完整,而且使用library的环境是复杂多变的,也即client代码会是不同的项目。不同的项目可能会有不同的契约,library无权干涉,所以必须自己保证自己的实现完整、健壮。但是同一个项目中的接口代码,只要约定好主调方检查参数就行叻。 可否举个例子说明主调方检查代码更多?我怎么想来想去都是觉得这样做代码最少呢? 比如,WEB方面传来的参数id,类型是Integer,有个方法叫做getObjectById(仅仅是举例,实际情况肯定不会这样:)),接受一个Integer类型的参数。按照我的习惯做法,这个方法的实现会是大概这样: public Object getObjectById(Class c, Integer id); { return session.get(c, id);; //session为Hibernate session } 这个实现简单,明了,开发人员在开发时也无须分散精力。 再来看client端代码,比如是个TestAction: public class TestAction extends ActionSupport { private Integer id; //id的getter和setter省略 public String execute(); throws Exception { if(id==null); { //这里必须要对id做检查,因为如果用户输入的参数不正确,是要给用户返回输入页面的 return INPUT; } //这里直接调用就可以叻 Object obj = getObjectById(SomeClass.class, id);; return SUCCESS; } } 如果在我这个例子中做被调方检查的话,因为主调方在调用之前也必须要对参数做一次检查,所以被调方检查基本就等于浪费叻。 |
|
返回顶楼 | |