团队遵守Command和Query分离的编码习惯能让后来者快速融入开发
时间:2011-09-23
来源:互联网
原文链接
这两天在逐步融入新的开发团队和新的项目,在熟悉代码和业务逻辑的同时也做一些小的功能开发。在这个过程中,遇到了一些小插曲引发了我的一点点思考。
比如说下面的例子:
//初始化SomeDataA的方法,以SomeDataB为参数
public SomeDataA initData(SomeDataB someDataB){
//.....
}
我的代码将要调用这个方法来返回一个someDataA实例,传入的是一个someDataB实例。从方法命名和返回值类型的角度来看,应该是根据someDataB的状态来初始化一个SomeDataA的实例给我。这都很正常,可是成语的运行结果和我想象的不同,调试之后我才发现,原来是参数someDataB的状态在调用前后发生了变化。也就是说这个方法在给我返回值的同时修改了传入参数someDataB的内容!然而这一切并没有任何暗示。虽然这个小问题并不太影响开发,语法层面也没有任何对这种操作的限制。不过如果已有代码中大量存在这样的情况的话,对于使用者总会有种“步步惊心”的感觉。总怕某个调用会引起一些意想不到的结果。
后来查了查,有这样一个提法"Command与Query分离”。其基本思想是对象的方法应该清晰明确的分为以下两种:
Query方法:返回结果但不修改系统的当前状态(无副作用)
Modifier方法:修改系统的状态但无返回值。
这样做的好处在于,把修改状态的方法和不修改状态的方法明确区分。在许多情况下可以有把握的调用Query,甚至调换调用顺序,不用担心副作用;只有在调用modifier方法时才需谨慎。
如果开发过程中尽可能的遵守如上的规则,那么对于一个新加入的开发人员来说,可以避免很多问题,当然维护起来也更容易。
参考文章:CommandQuerySeparation
原文链接
这两天在逐步融入新的开发团队和新的项目,在熟悉代码和业务逻辑的同时也做一些小的功能开发。在这个过程中,遇到了一些小插曲引发了我的一点点思考。
比如说下面的例子:
//初始化SomeDataA的方法,以SomeDataB为参数
public SomeDataA initData(SomeDataB someDataB){
//.....
}
我的代码将要调用这个方法来返回一个someDataA实例,传入的是一个someDataB实例。从方法命名和返回值类型的角度来看,应该是根据someDataB的状态来初始化一个SomeDataA的实例给我。这都很正常,可是成语的运行结果和我想象的不同,调试之后我才发现,原来是参数someDataB的状态在调用前后发生了变化。也就是说这个方法在给我返回值的同时修改了传入参数someDataB的内容!然而这一切并没有任何暗示。虽然这个小问题并不太影响开发,语法层面也没有任何对这种操作的限制。不过如果已有代码中大量存在这样的情况的话,对于使用者总会有种“步步惊心”的感觉。总怕某个调用会引起一些意想不到的结果。
后来查了查,有这样一个提法"Command与Query分离”。其基本思想是对象的方法应该清晰明确的分为以下两种:
Query方法:返回结果但不修改系统的当前状态(无副作用)
Modifier方法:修改系统的状态但无返回值。
这样做的好处在于,把修改状态的方法和不修改状态的方法明确区分。在许多情况下可以有把握的调用Query,甚至调换调用顺序,不用担心副作用;只有在调用modifier方法时才需谨慎。
如果开发过程中尽可能的遵守如上的规则,那么对于一个新加入的开发人员来说,可以避免很多问题,当然维护起来也更容易。
参考文章:CommandQuerySeparation
原文链接
作者: ABBuggy 发布时间: 2011-09-23
给个示例代码啊。。。。
作者: chenchenyangll 发布时间: 2011-09-24
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28