gpt4 book ai didi

ruby-on-rails - 具有一对多关联的 Demeter 法则

转载 作者:数据小太阳 更新时间:2023-10-29 08:51:30 24 4
gpt4 key购买 nike

我对如何避免一对多关联违反得墨忒耳法则感到困惑。假设我有一个这样的模型:

class Organization < ActiveRecord::Base
has_one :address
has_many :employees
end

我认为这样做会违反 Demeter 法则:

organization.address.street_name

这可以通过使用 *address_street_name* 方法来避免。这是一个足够简单的解决方案。但是假设我们现在这样做:

organization.employees.each { |employee| puts employee.first_name }

这似乎违反了得墨忒耳法则,尽管看起来并不那么明显。您仍然展示了对 Employee 内部结构的了解。避免此类违规行为的最佳方法是什么?

最佳答案

Demeter 法则的目标是避免暴露内部状态并鼓励使用“告诉,不要问”原则,而不是a.something.do_something,使用a。 do_something(然后可以委托(delegate)给其内部成员 something)。

话虽如此,这并不是一条您永远不能违反的硬性规定。在这种情况下,没有真正的解决方法,因为您没有要求员工使用其名字做某事,而只是查询其名字。

关于ruby-on-rails - 具有一对多关联的 Demeter 法则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11750618/

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