Php 模型登录系统:实现接口还是组合?

Php 模型登录系统:实现接口还是组合?,php,interface,domain-driven-design,composition,Php,Interface,Domain Driven Design,Composition,我正在用PHP开发一个管理应用程序,管理员可以在其中注册客户。有两种类型的客户:公司和个人。一家公司“有很多”联系人,他们可以登录到应用程序。个人可以“自己”登录 我的问题是,对客户和管理员如何登录进行建模的最佳方法是什么 用户/CanLogin/Authenticatable界面,联系人和个人将实现该界面。此接口具有getUsername和getPassword方法。 用户类。每个联系人和个人都有许多用户组成。 注意:“可登录”用户联系人或个人可以属于 多个客户。即使是联系人也可以是同一个人

我正在用PHP开发一个管理应用程序,管理员可以在其中注册客户。有两种类型的客户:公司和个人。一家公司“有很多”联系人,他们可以登录到应用程序。个人可以“自己”登录

我的问题是,对客户和管理员如何登录进行建模的最佳方法是什么

用户/CanLogin/Authenticatable界面,联系人和个人将实现该界面。此接口具有getUsername和getPassword方法。 用户类。每个联系人和个人都有许多用户组成。 注意:“可登录”用户联系人或个人可以属于 多个客户。即使是联系人也可以是同一个人 个人用户名


谢谢

让Contactperson继承个人,并将公司id添加到Contactperson类中

但是当个人必须从Person类继承时,它不能再继承抽象类Customer。因为您只能在PHP中扩展一个类。好吧,忘记Person类,您是对的;但你们应该能够从客户那个里继承你们想要的一切。对于登录,只需在其中添加登录凭据属性或多个属性。如果您无法从Customer继承所需的属性,因为这对公司不利,那么您应该更改您的模型。从Customer中创建一个接口,并有两个类,Company和Person实现它,然后您的个人和联系人可以继承Persons!这也不可能,因为公司本身不能登录,只能登录联系人。是的,然后你必须将Customer类更改为接口。就我在这里所见,公司和个人扩展同一类是没有意义的。他们是不同的。或者告诉我什么是客户类。抱歉把更新我的评论弄得一团糟^^^^在Customer类中会有Address、PhoneNumber等属性。但它确实也可能是一个接口,但我认为客户的实现比Person用户更常见。感谢您迄今为止的想法:@Soundz那么我无法键入提示“可登录”用户。例如,不可能使用AuthService::loginUser$user方法。通常,您的目标应该是拥有一个与实际域分离的身份和访问控制绑定上下文。您可以自由发布可能导致创建系统用户的事件,但尝试将所有内容放在一起可能会有问题。@EbenRoux这是一个很好的建议,也让人大开眼界!在这种情况下,SystemUser会拥有ContactPerson或Individual的引用属性吗?不会。通常,任何需要引用另一个的AR只会存储另一个ARs ID或包含该ID和一些基本非规范化值的值对象。但I&AC BC不应该需要这些东西,因为其他系统实际上是在下游。YMMV,但您可能在联系人中有SystemUserId。不过,我还是想看看这是否有必要。