假设您有三个模型,Organization
,OrganizationUser
和User
。
您需要处理以下要求:
当用户创建组织时,他们应该成为与该组织关联的用户(OrganizationUser
表中的一行)。
如果上述任何操作失败,整个"流程"应该失败。这应该通过交易来实现。
以下是我认为你可以设计它的三种最佳方式:
CreateOrganizationService
,将其从控制器中抽象出来;将它传递给模型。 CreateOrganizationService
是我们保留大部分业务逻辑的地方Organization
模型需要OrganizationUser
模型,并负责事务创建,业务逻辑和OrganizationUser
行的创建。有没有更好的方法来考虑这个问题,或者我可以应用不同的方法/模式?
答案 0 :(得分:2)
Controller的工作是将传入的请求转换为传出的响应。为此,控制器必须获取请求数据并将其传递到服务层。然后,服务层将Controller注入的数据返回到View中进行渲染。
MVC中的模型不是一个类,它是一个层。
Model的工作是表示问题域,维护状态,并提供访问和改变应用程序状态的方法。 Model层通常分为几个不同的层:
服务层 - 此层为应用程序的相关部分提供内聚的高级逻辑。该层由Controller和View助手直接调用。
数据访问层 - (例如Data Mapper)此层提供对持久层的访问。该层仅由Service对象调用。
值对象/实体层 - 此层提供简单的,面向数据的表示" leaf"模型层次结构中的节点。
对于您的问题:不要将业务逻辑或事务放入控制器。将业务逻辑(和事务)内容放入服务类(模型层的一部分)。
答案 1 :(得分:1)
您可以在控制器和存储库之间实现服务层,您可以在其中处理业务逻辑并使控制器清洁。所有与数据库(CRUD)相关的操作都可以在存储库中完成。
答案 2 :(得分:0)
,您可以致电:
VK_LMENU
我可能不会将模型传递给服务。我会将您应该调用的CreateOrganization调用中的每个数据b / c参数化的实际数据传递给应该使用DAO存储数据的数据访问层。