我似乎遇到了很多設計問題,我從來不知道 是否是 真的很合適。一方面,我經常聽到我應該限制耦合,並且堅持單一責任,但是當我這樣做時,我經常發現難以在需要時將信息獲取到程序的一部分 至 。對於 例如,最佳原則原理
class Singer
def initialize(name)
@name = name
end
attr :name
end
這時應該樂曲是:
class Song
def new(singer)
@singer = singer
end
end
或
class Song
def new(singer_name)
@singer_name = singer_name
end
end
後者具有較低的偶合,所以根據原則我應該使用它。 但是如果我後來在Song中發現某些東西需要了解更多關於 歌手的內容,我的感覺就不好。例如
class Song
...
def play
puts "Belting it out by #{@singer.name}, winner of
#{@singer.grammy_count} grammies!"
end
end
我會用一個固定的,如果我用了以後的宋級,而不是 前者。 但我懷疑有人會提醒我的SRP,單一職責 原則,並建議改爲:
class SongPlayer
def initialize(singer, song)
@singer, @song = singer, song
end
def play
puts "Belting it out by #{@singer.name}, winner of
#{@singer.grammy_count} grammies!"
end
end
而且是啊,我想這是有道理的,因爲其他歌手可以做掩護的 另外一個人的歌曲,對吧?但是,那真的會和 歌曲一模一樣嗎?在我的大多數情況下,它從來沒有相同的「歌曲」,所以我從來沒有 那 種情況。那麼SRP是否值得爲 代碼增加額外的類呢?
我有時會認爲許多OOP原則,SOLID或其他,出現了Java的侷限性,並且不適用於Ruby。