代码改变世界

如何写一个好的方法-读Clean Code 有感

2011-09-01 15:02  Xianjing  阅读(387)  评论(0编辑  收藏  举报

 

针对方法,文中提到了几个规则,我认为比较有价值的几个列在下面。

1.      短小。好的方法是只做一件事情。

        那么如何判断一个方法是做了一件事情呢?根据Clean Code的描述,是指的方法所作的事情在同一个抽象层级上。比如 Render page with setup and teardown,这个方法是在Render 一个page,它有两个步骤,这两个步骤又是在同一个抽象层级上,所以分别各为一个函数。

 renderPageWithSetupAndTearDown(){

                ….

                renderPageWithSetup();

               renderPageWithTearDown();

….

}

还有另一个原则,那就是看看函数是否可以再进行拆分。

 我的一个实践就是从业务角度描述这个函数所作的事情,如果一句话能够描述清楚,那么它所作的就是一件事情。如果描述不清楚,那就需要进行拆分。

  

2.        不要重复自己

 

3.        要有一个好名字,能够准确描述它所要表的业务含义。

最近有这样一个场景:

收到一个请求,检查请求中携带的ticketId是否在数据库存在,如果存在需要删除,如果不存在将请求导航到登录页面。

 从业务角度来讲,是检查请求中TicketId是否合法,合法就将请求中的user放到Session中随后使其其无效,否则将请求导航到登录页面。而从实现角度是检查数据库里是否存在这个ticketid,如果存在就删除。这个方法一开始也是这么命名的,CheckAndRemove。很明显但我们看到这方法的时候只能知道这个方法是在检查删除,但是针对什么样的场景和上下文呢,一点都没有得到。这个从实现角度的命名不能反映它真正想要表达的业务逻辑,后来我们将它改为Validateticket

ValiateTicket(Guid ticketId){

                If(IsTicketValid()){

                                PutUserInSessionAndDeactivateTicket();

}

 redirectToLogin();
}

 

肯定还有更好的命名。不过这个名字相对checkAndRemove更能表达一些业务的含义,在重构的时候就不至于迷失了方向。我们可以在有了新的想法的时候再对其进行重构。