【问题标题】:What are the advantages/disadvantages of separate user & account models单独的用户和帐户模型的优点/缺点是什么
【发布时间】:2013-12-06 14:21:49
【问题描述】:

我经常看到程序员将它们分开,例如用户has_one 帐户或个人资料或其他。是什么赋予了?将身份验证/授权与其他可能更容易放入用户模型的属性分开是否有一些安全优势?

我想更一般地说,我的问题是,一对一的has_one-belongs_to 关系的目的是什么?

如果有不同的、可互换的帐户类型(尽管我认为您可能只有用户类型),或者如果用户 has_many 帐户,我可以看到目的。

我错过了什么吗?为什么不使用一个模型?

【问题讨论】:

    标签: ruby-on-rails database-design rails-activerecord


    【解决方案1】:

    以下是我能想到的一些优点:

    • 分离用户和配置文件使模型更清晰,每个模型只负责一件事:用户登录/验证 - 只对用户自己重要的事情;以及在用户页面上查看的信息的个人资料,对每个人都很重要。

    • 因此,这将减少 DB 上的开销。您只需要在记录时访问/更新users 表,而无需访问/更新仅对查看重要的用户信息(可能很大)数据。

    • 如果您有一个开发团队负责身份验证,另一个负责演示。尽可能多地分离他们正在处理的资源是一个好主意。这里值得一提的是,这种分离不仅有助于模型,还有助于控制器甚至视图。

    • 另一个很好的理由是当您需要为用户提供多个配置文件时。是的,如果您的应用程序具有某种“社交性”,这很常见。 LinkedIn 允许用户拥有许多个人资料,每个个人资料都使用特定的语言。

    【讨论】:

      【解决方案2】:

      一个重要的原因是最好将类分开以使您的应用更易于管理。也许您的用户在注册您的服务后会填写一些个人资料信息,因此有一个单独的类来处理这更容易管理好,事情就不会那么混乱了。

      您的类应该有一个单一的职责,并且应该清楚该类的作用并能够完全执行它。这个原则是 SOLID 设计原则中的 S。您可以在此处阅读更多信息:SOLID

      希望这能回答你的一些问题!

      【讨论】:

      • 感谢您提供有关 SOLID 的信息。我以前遇到过大部分这些原则,但还没有将它们内化到我在设计软件时有意识地考虑它们的地步。我想我的问题的原因是这种方法似乎违反了 SRP,因为与其帐户分离的用户类无法完全执行其任务。但我想从“只有一个改变的理由”的角度来看,这更有意义。
      【解决方案3】:

      它实际上可以在访问量很大的网站中产生显着的性能差异。

      考虑一个人们几乎总是登录但很少访问他们的个人资料/帐户的网站。每次获取用户进行身份验证时,您都会将所有配置文件数据移入/移出/移动内存(您可以通过告诉 fetch 仅包含某些列来解决此问题,但这不太可维护且更容易发生意外错误而不是分割模型)。

      【讨论】:

        猜你喜欢
        • 2011-03-23
        • 2010-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-08
        • 1970-01-01
        • 2012-10-11
        • 1970-01-01
        相关资源
        最近更新 更多