api - 如何处理 MVC 中的复杂查询?

标签 api model-view-controller model transactions

假设您有三个模型,OrganizationOrganizationUserUser

您需要处理以下请求:

  1. 当用户创建组织时,他们应该成为与该组织关联的用户(OrganizationUser 表中的一行)。

  2. 如果上述任何操作失败,则整个“流程”都应该失败。这应该通过事务来实现。

以下是我认为构建它的三种最佳方式:

  • 在 Controller 中,创建 TXN,将其传递给 Organization 和 OrganizationUser 模型以创建它们各自的行。如果需要回滚。 Controller 包含业务逻辑(有用户付费,什么类型的组织...等)。
  • 在 Controller 中,调用处理交易创建的CreateOrganizationService,将其从 Controller 中抽象出来;将其传递到模型中。 CreateOrganizationService 是我们保留大部分业务逻辑的地方
  • Organization 模型需要 OrganizationUser 模型并负责事务创建、业务逻辑和 OrganizationUser 行的创建。

是否有更好的思考方式,或者我可以应用不同的方法/模式?

最佳答案

Controller 的工作是将传入的请求转换为传出的响应。为此, Controller 必须获取请求数据并将其传递到服务层。服务层然后返回 Controller 注入(inject)到 View 中进行渲染的数据。

MVC 中的模型不是一个类,它是一个层。

模型的工作是表示问题域、维护状态并提供访问和改变应用程序状态的方法。模型层通常分为几个不同的层:

服务层 - 该层为应用程序的相关部分提供内聚的高级逻辑。该层由 Controller 和 View 助手直接调用。

数据访问层 -(例如 Data Mapper)该层提供对持久层的访问。该层仅由服务对象调用。

值对象/实体层 - 该层提供模型层次结构中“叶”节点的简单、面向数据的表示。

对于您的问题:不要将业务逻辑或事务放入 Controller 中。将业务逻辑(和交易)内容放入服务类(模型层的一部分)。

Source

关于api - 如何处理 MVC 中的复杂查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49224263/

相关文章:

javascript - Spotify API : get random songs

C++ 适当的指针成员初始化

javascript - 如果验证失败,如何停止表单提交

asp.net-mvc-3 - 是否有一种自动方法可以在 MVC 中查找未使用的 View ?

c# - 在 MVC 中将数据从 View 传递到部分 View

javascript - 如何将输入绑定(bind)到 vue.js 模型

api - Yii2 Restful API - 添加新操作的示例

api - Facebook Public Feed Api 搜索 Hashtags?

model - Phalcon:如何定义在所有 Controller 和模型上可见的常量

parameters - 使用pytorch的rnn中隐藏维度和n_layers之间的区别