函数编写规则(一)

  每一个程序员都会写函数,都写了很多函数。然而,写好一个函数却不是那么容易的事。

1、调度与实现分离

  编写函数的第一件事是定位本函数的类别。函数的类别分为调度函数和实现函数。实现函数是提供具体任务实现的函数,实现函数要求不依赖任何外部环境;调度函数是直接响应用户请求的函数,它认识或拥有大量的外部环境资源,并调用实现函数响应用户请求。调度函数与实现函数的分离满足单一职责的原则,即调度的不实现,实现的不调度。

2、实现不依赖于外部环境

  实现函数不得依赖任何的外部环境,如全局变量,全局函数,或者单件模式实例等。实现函数只能依赖于函数调用时的输入参数。考虑一个除法任务,除法的实现函数必须考虑到除数为0时的错误处理问题。一般而言,有三种处理方式,一种是引发异常,第二种是调用全局定义的错误处理函数,第三种是要求调用函数时提供错误处理回调函数(或者仿函数)。对于第一种方式,调用程序员可能会响应,也可能不响应该异常,导致程序的行为不稳定,实际上,相当于隐式的依赖于外部的一个catch代码段;而第二种错误处理方式则是显示的依赖于外部全局函数;这两种方式都违反了实现不依赖于外部环境的原则。只有第三种方式满足这个原则,同时,约束调用程序员不能再做鸵鸟,他必须显示提供除0时的错误处理问题,程序的质量容易得到保证。所以一个标准的除法实现函数原型应该为:float DivideImpl(float a,float b,error_cb pErrorCB)

3、调度不得提供实现

  调度函数不得提供功能实现,相反,它必须委托给实现函数完成具体的功能。调度函数一般拥有或了解大量的环境信息,这种依赖关系使得调度函数的稳定性极差,随时可能需要重构。而业务实现往往是比较稳定的,一般都是50年不变,所以不能在调度函数中拥有实现。调度函数要求准备好实现函数要求的所有环境参数,最终调用实现函数满足用户请求。调度函数可以调用其他调度函数来辅助完成任务,但允许调度的其他调度函数应该同级且比本调度函数低且仅低一级。如总经理可以调度各部门,各部门调度各小组,但不允许总经理越级调度小组。

4、查询与命令分离

  查询函数返回结果,不更改状态;命令更改状态,不返回结果。网络访问例外,参见'http://blog.csdn.net/hlqyq/archive/2005/12/02/541912.aspx'

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值