舉個例子來說,考慮一下以下的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原則,就可以把不同的方法放置在同一個類中,并且屬于同一個類。你只需簡單的將這些有著不同原由的方法放置在不同的源文件中即可。真是魚與熊掌得其兼??!
原文轉自:http://www.anti-gravitydesign.com