假设您有三种模型,OrganizationOrganizationUserUser

您需要处理以下要求:

  • 用户创建组织时,他们应成为与该组织关联的用户(OrganizationUser表中的一行)。
  • 如果以上任何操作失败,则整个“流”应失败。这应该通过事务来实现。

  • 以下是我认为可以构建它的三种最佳方法:
  • 在控制器中,创建TXN,将其传递到Organization和OrganizationUser模型以创建它们各自的行。如果需要回滚。控制器包含业务逻辑(已向用户付款,什么类型的组织...等)。
  • 在控制器中,调用CreateOrganizationService来处理事务创建,将其从控制器中抽象出来;将其传递给模型。 CreateOrganizationService是我们保留大多数业务逻辑的地方
  • 具有Organization模型需要OrganizationUser模型,并负责事务创建,业务逻辑和OrganizationUser行的创建。

  • 有没有更好的方法来考虑这一点,或者我可以采用不同的方法/模式?

    最佳答案

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

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

    该模型的工作是代表问题域,维护状态并提供用于访问和更改应用程序状态的方法。 “模型”层通常分为几个不同的层:

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

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

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

    问题:不要将业务逻辑或事务放入控制器。将业务逻辑(和事务)内容放入服务类(模型层的一部分)。

    Source

    07-24 15:23