论坛首页 综合技术论坛

如何TDD,我对TDD的疑问

浏览 10516 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-08-14  
看大家说的越来越多,感觉自己需要好好充电了。

关于敏捷方面的认识确实太肤浅了。

似乎我得转变下思想。

大家推荐几本书吧。希望是又小又薄的,因为砖头书总看不完:(
0 请登录后投票
   发表时间:2006-08-14  
hongliang 写道
gigix 写道
一个参数应该符合什么条件(例如不为null,不为空字符串),要么主调方检查,要么被调方检查,这是接口契约的一部分,要弄清楚的。如果两边都在检查,第一是重复代码,第二是契约弄不清,叫别人看了你的代码不能肯定到底应该怎么去用一个东西。


gigix说的对,这也正是契约的作用。我比较倾向于主调方检查,被调方尽可能地不要分心去想20%的参数错误情况,只要默认所有的参数都正确,集中精力完成该完成的事情就行叻,不然写起来要烦死。


我比较倾向于被调方检查,一则,每个人要保证自己的代码的健壮性,二则,一个方法通常都会被多处调用,如果主调方检查的话,冗余代码更多,而且一旦检查逻辑发生变化,对应起来更烦!
0 请登录后投票
   发表时间: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;
    }
}


如果在我这个例子中做被调方检查的话,因为主调方在调用之前也必须要对参数做一次检查,所以被调方检查基本就等于浪费叻。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics