我对如何通过一对多关联避免违反 Demeter 法则感到困惑。假设我有一个这样的模型:
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 }
这似乎违反了得墨忒耳法则,尽管看起来并不那么明显。您仍然展示了对 Employee 内部结构的了解。避免此类违规行为的最佳方法是什么?