如何写一个好的方法-读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更能表达一些业务的含义,在重构的时候就不至于迷失了方向。我们可以在有了新的想法的时候再对其进行重构。