gpt4 book ai didi

ruby - 最佳原则中的原则

转载 作者:数据小太阳 更新时间:2023-10-29 07:12:19 25 4
gpt4 key购买 nike

我似乎经常遇到一些设计问题,但我不知道是什么是真的很合适。一方面我经常听到我应该限制耦合和坚持单一职责,但当我这样做时,我常常发现它很困难到在需要时将信息获取到程序的一部分。为了例如,

class Singer
def initialize(name)
@name = name
end
attr :name
end

那么Song应该是:

class Song
def new(singer)
@singer = singer
end
end

class Song
def new(singer_name)
@singer_name = singer_name
end
end

后者耦合性小,按道理应该用。但如果我以后发现宋有什么需要了解更多歌手,我的状态很糟糕。例如

 class Song
...
def play
puts "Belting it out by #{@singer.name}, winner of
#{@singer.grammy_count} grammies!"
end
end

如果我使用后面的 Song 类而不是以前的。但后来我怀疑有人会提醒我 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。

最佳答案

耦合 应该与另一个概念相对应,cohesion .您想在两者之间取得平衡,而不是将其中之一发挥到极致。在您的示例中,singer_name 似乎属于 Singer,因此为了保持凝聚力,您应该将 Singer 对象传递给 Song,而不是 name

更一般地说,您需要记住,这些原则只是指导方针。您始终必须运用常识和您对问题领域的独特理解。很少有明确的案例 - 它甚至可能随着您的应用程序的增长或您对领域的了解而改变。

关于ruby - 最佳原则中的原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8255360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com