我需要一些帮助来理解每个在大型应用程序中扮演的角色。我将首先从一个场景开始:
- 像往常一样会有用户
- 用户必须具有 MembershipType(免费、基本、商业)。
- 用户可以拥有(不是必需的)企业(用户拥有一个或零个企业)
- 一个用户可以有一个订阅(用户有一个或零个订阅)。
- 订阅需要与 MembershipType 相关的 SubscriptionPlan。因此,“基本”会员类型在 Stripe 中将具有“基本 2015”计划;一个“企业”将有一个“business2015”计划。
- 一个用户有地址(用户多对多地址)
- 基本用户必须有“个人”地址存档,而商业用户必须有“公司”地址存档
- 还有其他要求,但这足以获得更好的画面
到目前为止,我有这些模型:用户、会员类型、业务、订阅、订阅计划和地址。
一些业务逻辑要求我至少有以下方法: - 用户 isBusiness() - 用户 hasAddress(type) 其中类型是(个人或企业) - 会员类型 getPlanForCurrentYear()
- 需要其他东西,但我会在这里停止
现在举个例子:John 注册并需要提供基本信息(电子邮件、密码、姓名)。他注册为企业。在这个基本的注册过程之后,他会登录并通知他需要在获得访问权限之前完成他们的个人资料。然后要求他提供商业信息(姓名、网站、电子邮件、电话)。我还需要营业地址。然后,他必须订阅当前年度计划“business2015”。
所有这些我都设法做到了,但我是在我的控制器中做到的。正如其他帖子中的一些建议,首先使其工作,然后决定是否需要将其提取到存储库。好吧,我已经到了确定我需要使用存储库的地步,因为它变得越来越复杂,我必须不断地修改我的控制器。因此,经过大量研究后,我仍然对如何使我的 DB 到 UI 的双向工作没有混乱。
我的研究使我意识到我需要使用存储库,也许是服务类和作业。有人可以分享一些关于我需要什么才能拥有一个好的架构的想法吗?
每个模型都需要一个存储库吗?拥有一个带有通用方法(all、getId、create、update、delete 等)的接口和抽象存储库。如果是这样,我将如何在它们之间关联存储库?
我是否需要在特定时间编排所有涉及的存储库的服务类(如 RegisterUser、CompleteProfile)?
在这种情况下我应该如何使用 Jobs?从控制器调度它们并注入存储库或服务类?
Laravel(开源)中是否有大型应用程序的示例,我可以看一下以了解所涉及的一些原则?
谢谢你。