我对如何避免一对多协会违反德米特法感到困惑。假设我有一个这样的模型:

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

我认为这样做是违反德米特定律的:
organization.address.street_name

这可以通过使用*address_street_name*方法来避免。这是一个简单的解决方案。但我们现在这样做:
organization.employees.each { |employee| puts employee.first_name }

这似乎违反了德米特定律,尽管这并不十分明显。你仍然对员工的内部结构有所了解。避免此类违规的最佳方法是什么?

最佳答案

德米特定律的目标是避免暴露内部状态,并鼓励使用“告诉,不要问”原则,而不是使用“告诉,不要问”原则,使用“告诉”,然后可以委托给内部成员。
尽管如此,这并不是一个你永远不能违反的硬性规定。在这种情况下,没有真正的办法解决这个问题,因为你不是要求员工用他的名字做一些事情,而只是查询他的名字。

关于ruby-on-rails - 与一对多协会的得墨meter耳定律,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11750618/

10-12 21:07