我经常看到程序员将这些分开,例如:用户has_one
帐户或个人资料或其他内容。是什么赋予了?将身份验证/授权与可能更容易放入用户模型的其他属性分开是否有一些安全优势?
我想更普遍的是,我的问题是,一对一has_one
- belongs_to
关系的目的是什么?
如果有不同的,可互换的帐户类型(尽管您可能只有用户类型,我认为),或者如果是用户has_many
帐户,我可以看到目的。
我错过了什么吗?为什么不使用一个型号?
答案 0 :(得分:3)
以下是我可以考虑的一些优点:
分离用户& profile使模型更清晰,每个模型只负责一件事:用户登录/验证 - 仅对用户自己有用的事情;以及在用户页面上查看的信息的配置文件以及每个人的事项。
因此,这将减少数据库的开销。您只需要在记录时访问/更新users
表,而无需访问/更新用户信息的(可能很大的)数据,这些数据只对查看有用。
如果您有一个开发团队负责身份验证,另一个负责演示。尽可能地分离他们正在处理的资源是个好主意。值得一提的是,这种分离不仅有助于模型,还有助于控制器和视图。
另一个很好的理由是,您需要为用户提供多个配置文件。是的,如果你的应用程序以某种方式“社交”,这很常见。 LinkedIn允许用户拥有多个配置文件,每个配置文件都使用特定语言。
答案 1 :(得分:1)
一个重要原因是,最好将课程分开,以使您的应用程序更易于管理。也许您的用户在注册您的服务后会填写一些个人资料信息,因此有一个单独的类来处理这个更容易管理和事情变得不那么混乱了。
你的课程应该只有一个责任,应该清楚该课程的功能并完全执行它。这个原则是SOLID设计原则中的S。你可以在这里阅读更多相关内容:SOLID
希望这能回答你的一些问题!
答案 2 :(得分:0)
它实际上可以在流量很大的网站上产生显着的性能差异。
考虑一个人们几乎总是登录但很少访问他们的个人资料/帐户的网站。每当您获取用户进行身份验证时,您都会将所有配置文件数据移入/移出内存(您可以通过告知提取仅包含某些列来解决此问题,但这样做的可维护性较差并且比分割模型更容易意外拧紧。