我们知道单一指责原则的目的是只存在一个原因引起类的变化。那么是否可以这么理解,就是理想情况下,一个类只能有一个方法,但是这样做在实际开发过程中,会引起很多额外的麻烦,所以很多时候,it's hard to say。
可以这么理解吗?
走同样的路,发现不同的人生
不是吧,目前的時間進行合理的抽象(單一職責=>高內聚),正確的時間進行更加細化的抽象(重構),產品迭代的過程中重構是不可避免的,不可能一步登天。
單一職責, 也就是一個類別應該只負責一件事。 關鍵是取決於你認為這件事請的粒度有多大? 字串小寫轉大寫是一件事(1)。 字串處理也是一件事(2)。 如果你認為(1)就是一個職責的話, 那麼小寫轉大寫就要寫一個類, 判斷非空要寫一個類, 字符統計就要寫一個類別。 小写转大写就要写一个类, 判断非空要写一个类, 字符统计就要写一个类。 如果你认为(2)就是一个职责的话, 那么所有字符串处理的东西都在一个类似StringUtils如果你認為(2)就是一個職責的話, 那麼所有字串處理的東西都在一個類似StringUtils類別裡面。 所以其實這是比較抽象的東西, 並沒有絕對的標準,和具體業務有一定的關係。
小寫轉大寫
判斷非空
字符統計就要寫一個類別。 小写转大写就要写一个类, 判断非空要写一个类, 字符统计就要写一个类。 如果你认为(2)就是一个职责的话, 那么所有字符串处理的东西都在一个类似StringUtils如果你認為(2)就是一個職責的話, 那麼所有字串處理的東西都在一個類似StringUtils類別裡面。 所以其實這是比較抽象的東西, 並沒有絕對的標準,和具體業務有一定的關係。
小写转大写
判断非空
字符统计
StringUtils
不是說只有一個方法,是只能由一個維度引起的變化,這樣的好處就是職責分明,結構簡單,耦合性地,這樣的組織有利於大型程序的組織,試想一下,像QQ這樣複雜的App ,假如不執行單一職責原則,誰知道一個程序裡麵包含多少東西,改變一處會有多大影響。
不是吧,目前的時間進行合理的抽象(單一職責=>高內聚),正確的時間進行更加細化的抽象(重構),產品迭代的過程中重構是不可避免的,不可能一步登天。
單一職責, 也就是一個類別應該只負責一件事。
關鍵是取決於你認為這件事請的粒度有多大?
字串小寫轉大寫是一件事(1)。
字串處理也是一件事(2)。
如果你認為(1)就是一個職責的話, 那麼
小寫轉大寫
就要寫一個類,判斷非空
要寫一個類,字符統計就要寫一個類別。
小写转大写
就要写一个类,判断非空
要写一个类,字符统计
就要写一个类。如果你认为(2)就是一个职责的话, 那么所有字符串处理的东西都在一个类似
StringUtils
如果你認為(2)就是一個職責的話, 那麼所有字串處理的東西都在一個類似StringUtils
類別裡面。所以其實這是比較抽象的東西, 並沒有絕對的標準,和具體業務有一定的關係。
不是說只有一個方法,是只能由一個維度引起的變化,這樣的好處就是職責分明,結構簡單,耦合性地,這樣的組織有利於大型程序的組織,試想一下,像QQ這樣複雜的App ,假如不執行單一職責原則,誰知道一個程序裡麵包含多少東西,改變一處會有多大影響。