申明:本文主要是参考《代码整洁之道》,总结出来的内容也是基于自己理解能力上的东西,不会照搬原书的内容,可能会加上自己的一些理解,也可能忽略文中的某些内容。
1、函数编写原则:短小、只做一件事,只做一件事的判断方法:所有步骤都在一个抽象层,不能再拆解出一个函数!
(但是我们在实际的开发环境中还是有可能不得不违反这些原则)。
2、自顶向下读代码原则:每个函数后面跟着位于下一抽象层级的函数。我的理解其实就是我们写作文中常用的“总分”结构写法。比如你需要写一个包含很多事务的函数,那么我首先应该先把这些事务再抽象分类,形成更高级别的事务抽象层。具体到代码里面就是最高层函数包含对低级函数的调用以完成整个事务的实现,这样层层递进,既简洁又容易阅读。如以下代码例子:
public void function(string schoolID)
{
function1();
function2();
...
}
private void function1()
{
function3();
function4();
...
}
private void function3()
{
//Your Solution Code
}
3、对switch case 语句的封装
如我们经常在控制器中使用:
switch (ret)
{
case 0: return new AjaxResult(AjaxResultStatus.Success, "请求成功", scheduleLog);
case 1: return new AjaxResult(AjaxResultStatus.ClientError, "参数错误", null);
case 10: return new AjaxResult(AjaxResultStatus.ServerError, "程序出现异常", null);
default: return new AjaxResult(AjaxResultStatus.Success, "请求成功", scheduleLog);
}
那么这样要写好多,而且一个地方改则每个控制器方法都要改,如增加ret=3 token失效那么你是不是每个方法都要加,这是多大的工程呀。
完全可以将之封装为一个工具类。如AjaxResult其实也是一个工具类。
//ajaxresult封装类,每次有新增的状态在此处添加/修改即可
public class AjaxResultHelper
{
public AjaxResult getAjaxResult(object obj, int ret)
{
switch (ret)
{
case 0: return new AjaxResult(AjaxResultStatus.Success, "请求成功", obj);
case 1: return new AjaxResult(AjaxResultStatus.ClientError, "参数错误", null);
case 10: return new AjaxResult(AjaxResultStatus.ServerError, "程序出现异常,请联系管理员", null);
default: return new AjaxResult(AjaxResultStatus.Success, "请求成功", obj);
}
}
}
调用:
return new AjaxResultHelper().getAjaxResult(scheduleLog, ret);//只需一句即可调用,而且维护更方便
4、函数名称使用描述性名称,能够很方便理解函数的功能
5、函数参数尽量少太多的参数会带来不必要的麻烦,可以采用封装类的方式来解决多参数。
6、抽离try/catch代码块,确实能提高代码的可读性,毕竟有些代码块很长也不便理解都是做哪些事务,抽离成新的函数我们可以从函数名称就能知道代码块是为了完成哪些事务。