假设您有三个模型,Organization
、OrganizationUser
和 User
。
您需要处理以下请求:
当用户创建组织时,他们应该成为与该组织关联的用户(
OrganizationUser
表中的一行)。如果上述任何操作失败,则整个“流程”都应该失败。这应该通过事务来实现。
以下是我认为构建它的三种最佳方式:
- 在 Controller 中,创建 TXN,将其传递给 Organization 和 OrganizationUser 模型以创建它们各自的行。如果需要回滚。 Controller 包含业务逻辑(有用户付费,什么类型的组织...等)。
- 在 Controller 中,调用处理交易创建的
CreateOrganizationService
,将其从 Controller 中抽象出来;将其传递到模型中。CreateOrganizationService
是我们保留大部分业务逻辑的地方 Organization
模型需要OrganizationUser
模型并负责事务创建、业务逻辑和OrganizationUser
行的创建。
是否有更好的思考方式,或者我可以应用不同的方法/模式?
最佳答案
Controller 的工作是将传入的请求转换为传出的响应。为此, Controller 必须获取请求数据并将其传递到服务层。服务层然后返回 Controller 注入(inject)到 View 中进行渲染的数据。
MVC 中的模型不是一个类,它是一个层。
模型的工作是表示问题域、维护状态并提供访问和改变应用程序状态的方法。模型层通常分为几个不同的层:
服务层 - 该层为应用程序的相关部分提供内聚的高级逻辑。该层由 Controller 和 View 助手直接调用。
数据访问层 -(例如 Data Mapper)该层提供对持久层的访问。该层仅由服务对象调用。
值对象/实体层 - 该层提供模型层次结构中“叶”节点的简单、面向数据的表示。
对于您的问题:不要将业务逻辑或事务放入 Controller 中。将业务逻辑(和交易)内容放入服务类(模型层的一部分)。
关于api - 如何处理 MVC 中的复杂查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49224263/