current_session对象是否对User对象有太多了解?

时间:2014-07-03 17:59:32

标签: ruby-on-rails ruby oop

我有两个班级:

class User < ActiveRecord::Base
  has_many :articles
  ...
end

class CurrentSession
  def initialize(...)
    ...
  end

  def managing
    User.where(...).first
  end
end

User类是从Rails AR继承的对象。请注意,用户具有关联has_many :articles。您还会注意到current_session通过managing方法公开了User对象。这是使用合成完成的。

current_session = CurrentSession.new(...)
current_session.managing.articles if current_session.managing.present?

current_session现在可以通过Article方法访问managing对象了吗?

current_session知道的太多了吗?我是否只是将Article对象的内容泄漏到current_session?这太糟了吗?

1 个答案:

答案 0 :(得分:0)

如果User是ActiveRecord模型,并且您通过另一个类的方法公开该模型,那么是的,您将公开该模型的所有,包括它关系和这些关系的方法。

我会问这个问题:你需要暴露多少?在Session#managing方法中返回完整用户的目的是什么?鉴于课程的名称,您可能只需要跟踪用户的ID?然后就回来吧。问题解决了。如果您确实需要完整的用户,我不知道您将如何(或为什么)阻止访问它的关系。