我似乎遇到了很多设计问题,我从来不知道 是否是 真的很合适。一方面,我经常听到我应该限制耦合,并且坚持单一责任,但是当我这样做时,我经常发现难以在需要时将信息获取到程序的一部分 至 。对于 例如,最佳原则原理
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。