举个例子来说,考虑一下以下的Java类:
clearcase/" target="_blank" >cccccc>
class Employee |
当然这好像又与OO的概念相违背,因为一个好的对象应该包含所有操纵它的方法。分解的做法的确有这种趋势,我们因为不希望商业规则与报表格式混杂起来,所以就需要将这些方法放入到不同的类中。
然而,在Ruby中,情况会有些不同。仔细想想下面三个文件:
employeeBusinessRules.rb class Employee def calculatePay ... endend employeeDatabaseSave.rb class Employee def save ... endend employeeHourlyReport.rb class Employee def reportHours ... endend |
require 'employeeBusinessRules.rb' |
因此,类会在余下的程序开始执行前被构造完成。可是没有一个源文件包含了所有这三个不同的方法。实际上,这三个源文件对彼此一无所知,而这就意味着,这三个文件之间并没有耦合。
毫无疑问,我们必须要关注这些成员。为了能访问这些成员(分散在多个源文件中),我们搞不好会使得这些源文件拙劣的耦合起来。可是,假如你有那么一点点地关注并抽象的话,就能使得这些源文件非常漂亮的解耦,进一步的,还可以把这些方法保留在同一个类中(因此也在同一对象中)!
所以,在Ruby中,不用违反SRP原则,就可以把不同的方法放置在同一个类中,并且属于同一个类。你只需简单的将这些有着不同原由的方法放置在不同的源文件中即可。真是鱼与熊掌得其兼啊!