补肾调理药材有哪些:Command与Query分离
来源:百度文库 编辑:九乡新闻网 时间:2024/05/04 07:11:19
原文:CommandQuerySeparation 设计 Bliki 索引
“Command与Query分离”这条术语首现于Bertrand Meyer的著作《面向对象软件构造(Object Oriented Software Construction)》,这本书是OO思想普及发展初期几本影响力最大的OO著作之一(说的是这本书的第一版,第二版也很好,不过你得先炼几个月臂力才能举起它来)。
“Command与Query分离”的基本思想是object的方法应该清晰明确地分为以下两种:
Command与Query分离原则的实际价值在于,把修改状态的方法和不修改的明确地区分开将会带来巨大的便利:在许多情况下你可以非常有把握地使用Query,不必在意是什么地方,还可以调整多个Query的调用顺序,只需在用modifier时再小心谨慎。
该原则主张以返回类型来区分两种方法,这是一条不错的规约,大多数情况下都能达到效果。考虑Java遍历一个集合的惯用法:next方法既返回集合的下一项又让这个iterator前进一步。但我个人更喜欢将advance方法(前进)和current方法(取当前项)分开的风格。
Meyer愿意绝对遵守分离原则,但实际上存在例外情况,比如Stack的pop方法就是个好例子,既是个modifier又有返回值,对此 Meyer的说法恰如其分:你可以别定义这个方法,但这个惯用法确实有用。因此,我对分离原则的态度是可以遵守时就遵守,但类似pop那样的方法我不惮以违规来实现。
如果语言本身支持这种分离观念——试想一种语言能自己检测哪些方法修改状态,或至少允许程序员来标定——这该多好。之所以语言无法自动检测,是因为“不改变状态”这条规则只是针对系统的可见状态说的;程序员做标记看起来更合理些,可并不常见,我接触到的唯一实例是C++的const修饰词(译注1),但我已经多年不用C++了,所以很难评估它在实践中的效用,但我知道优秀的C++程序员对它乐此不疲。
译注1:C++还有一个mutable修饰词,mutable修饰的变量基本上对应于Martin说的非可见状态,标记为const的class成员函数如果修改非mutable成员变量会编译报错,但可以修改mutable变量,因此C++语言实现了“自动检测”。
“Command与Query分离”这条术语首现于Bertrand Meyer的著作《面向对象软件构造(Object Oriented Software Construction)》,这本书是OO思想普及发展初期几本影响力最大的OO著作之一(说的是这本书的第一版,第二版也很好,不过你得先炼几个月臂力才能举起它来)。
“Command与Query分离”的基本思想是object的方法应该清晰明确地分为以下两种:
- Query:返回结果但不修改系统的可见状态(无副作用)。
- Command:修改系统的状态但无返回值。
Command与Query分离原则的实际价值在于,把修改状态的方法和不修改的明确地区分开将会带来巨大的便利:在许多情况下你可以非常有把握地使用Query,不必在意是什么地方,还可以调整多个Query的调用顺序,只需在用modifier时再小心谨慎。
该原则主张以返回类型来区分两种方法,这是一条不错的规约,大多数情况下都能达到效果。考虑Java遍历一个集合的惯用法:next方法既返回集合的下一项又让这个iterator前进一步。但我个人更喜欢将advance方法(前进)和current方法(取当前项)分开的风格。
Meyer愿意绝对遵守分离原则,但实际上存在例外情况,比如Stack的pop方法就是个好例子,既是个modifier又有返回值,对此 Meyer的说法恰如其分:你可以别定义这个方法,但这个惯用法确实有用。因此,我对分离原则的态度是可以遵守时就遵守,但类似pop那样的方法我不惮以违规来实现。
如果语言本身支持这种分离观念——试想一种语言能自己检测哪些方法修改状态,或至少允许程序员来标定——这该多好。之所以语言无法自动检测,是因为“不改变状态”这条规则只是针对系统的可见状态说的;程序员做标记看起来更合理些,可并不常见,我接触到的唯一实例是C++的const修饰词(译注1),但我已经多年不用C++了,所以很难评估它在实践中的效用,但我知道优秀的C++程序员对它乐此不疲。
译注1:C++还有一个mutable修饰词,mutable修饰的变量基本上对应于Martin说的非可见状态,标记为const的class成员函数如果修改非mutable成员变量会编译报错,但可以修改mutable变量,因此C++语言实现了“自动检测”。
Command与Query分离
感觉与思维的分离
startsrc Command
VI Command
CrazyCabin : Query的用法
人大代表盼高中教学与高招分离
2.教师与学生时空分离
双子与天蝎决绝的分离
二战与外蒙古分离啊
SQL Server2000数据库分离与附加-图形
物质的制备、分离与提纯、鉴别与检验-1
98.6%选民支持苏丹南方与北方分离
我国大学生民工群体调查:岗位与保障城乡分离
我国大学生民工群体调查:岗位与保障城乡分离
我国大学生民工群体调查:岗位与保障城乡分离
法籍女子与中国男友分离半世纪后结婚(图)
教师与学生时空分离会出现什么问题
教与学时空分离所产生的问题
教与学时空分离所产生的问题
厂办大集体与主办国企五年内彻底分离
测试环境与开发环境分离的必要性
航天飞机最后一次与国际空间站分离(Pic)
清末与民国时期的内外蒙古分离运动分析
SQL Server 2000 数据库分离与附加-命令行方式