2011-10-21 12 views
1

让我们假设以下结构:从架构的角度来看,应用程序中的模型应该能够在after_initialize函数中设置自己的用户关联吗?

class Question < ActiveRecord::Base 
    after_initialize :set_defaults 

    belongs_to :user 

    ... 

    private 
    def :set_defaults 
     self.user = SomeAuth.current_user 
    end 
end 

class User < ActiveRecord::Base 
    has_many :questions 

    ... 
end 

此外,我们假设SomeAuth是一些黑盒魔术认证方案。 我们可以将其视为DeviseAuthlogic(或者在这里插入您最喜欢的ruby身份验证解决方案)。

根据这些假设,是一个反模式有一个Question树立了自己的user属性初始化后(对于所有意图和目的,Question.new被调用后,即在after_initialize宏)?

回答

0

我不想把它归类为好的或坏的模式。

如果您的系统只有一个RoR应用程序,那么它似乎是一个很好的模式。您使用框架提供的机制,因此不会创建额外的代码并使其非常简单。您的域对象与您的认证方案相关联,但在这个简单的上下文中,它可能是有益的。

如果您的系统收集了许多不同的应用程序,并且您希望在它们之间重复使用一个域模型,那么您可能想要离开您的域和auth概念。一些子系统可能不关心认证问题(如某种类的批处理)。在这种情况下,domain和auth(以及它被加载的方式)之间的明确关系可能是反模式。

+0

我有企业背景。在那里,系统很少是孤岛。不同的问题域通常共享对象。当然,这种将域对象绑定到特定域的认证方案的想法让我担心了一下。我想我现在可以将对象与验证方案耦合起来,并且稍后会担心抽象和概括... – zealoushacker

相关问题