我正在使用laravel 5开发一个简单的简单网站,其中包含如下组织的不同用户帐户:
学生和管理员继承自用户。
示例用户表
样本学生表
我可以有成千上万的学生,但只有几个管理员。目前,我的方法是在主页上有一个登录框,两个用户都可以登录,并根据用户类型显示相应的个人资料页面。 他们对这种方法有任何风险,还是他们有更好的方法来解决这个问题?
修改
应用域
答案 0 :(得分:0)
嗯,你可以这样走,我想这是一个偏好问题。我会使用不同的模型。
在模型上:我喜欢DDD(域驱动设计)和事件风暴,以深入了解我解决问题的领域。关于DDD:
为了创建优秀的软件,您必须知道该软件的用途。除非您对银行业务的理解有充分的了解,否则您无法创建银行业务软件系统,必须了解银行业务领域。
来自:Eric Evans的领域驱动设计。
Event storming是一种用于快速探索复杂业务领域的研讨会格式。
我对您的域名了解不多,所以我的答案基于许多假设。不过,它可能会对你有所帮助。
在这种情况下,我想我会将所有三个概念(Admin
,Student
和User
)分开。即使他们可能共享某些属性,但在现实世界中他们也涉及不同的域。忽略这一事实,您的代码将很快涵盖令人讨厌的边缘情况,并包含不必要的复杂性。
因此,Admin
和Student
有两个不同的类。两个都一个User
。就我而言,这将导致三个不同的表格。有可能Student
还有Admin
(以便管理,过滤概述等),但我只是在猜测那里
在所有三种情况下,我都会使用不可移动的value objects,不仅仅是为了完成代码,更重要的是用于封装数据,验证和暴露相关行为。
User
登录,成功验证后会重定向到Student
或Admin
的视图。您会注意到,当您的应用程序增长并变得更加复杂时,将这些域分开将是一个巨大的优势。您可以考虑在不同的域上使用单独的管理后端,但是现在我说它只会引入复杂性,几乎没有任何价值。
使用权限模拟系统中允许执行的操作可能很有价值。如:Admin
允许执行任何操作,Student
有一个或多个Privilege
s。这将创建一个灵活的系统,其中一些学生可以帮助管理。例如:也许有些学生在一些随机学习小组的带领下,需要能够进入学习小组管理。现在可能没有必要,所以请确保您的代码对未来友好。
我将研究的其他主题:使用CQRS或CRUD,使用event store而不是关系数据库(如果您希望能够查看或重新回到历史记录中,则非常有用)
在任何情况下:不要选择最新的首字母缩略词,始终选择最适合您的域名(或上下文或应用程序)。