是的,另一个关于 Web 应用程序的 MVC 架构中职责分离的问题 - 我认为这个有一个微妙的区别......
我现有的实现如下所示:
- 控制器:非常“薄”;A除了调用模型和视图,仅路由和表示逻辑
- 型号:非常“厚”;所有业务逻辑
- 视图:非常“薄”;除了内容和标记,代码仅限于循环和数据格式
此外,该项目使用 ORM 作为数据库之上的抽象层,并使用“连接器”作为外部服务的包装类。
我的问题涉及模型之间的职责分离。在大多数情况下,我们的模型模仿了我们系统中的“事物”——“用户”、“产品”、“订单”等。
我发现这对于服务简单的数据检索请求非常有效——控制器实例化正确的模型并调用相关的“getter”。
当启动更复杂的流程(例如“PlaceOrder”或“RegisterUser”)时,就会出现问题。有时这些过程可以在单个模型中实现,有时它们需要模型之间的通信或协调才能实现。
就目前而言,在这些情况下,模型直接相互通信,而不是由控制器管理的过程。将流程保留在模型中似乎是正确的(例如,控制器不需要知道“注册用户”的业务规则需要发送确认电子邮件)。
我在这个实现中发现了两个让我有些担心的问题:
- 模型通常似乎对其他模型了解太多 - 在此实现中模型似乎过于紧密耦合。
- 模型中的方法有两种一般类型:“getter/setter”和我用来调用“流程方法”的方法,管理流程的方法,调用模型中的其他方法或其他适当的模型 - 这些方法似乎' un-model-like',因为缺乏更好的描述。
实现两种模型是否合适 - “数据/对象模型”(主要填充“getter/setter”,也许是简单的“流程方法”,它们完全是内部的和“流程模型”(填充有“流程方法”,其中需要多个(“数据/对象”)模型的协作)?
在这个实现中,我们有代表“用户”、“产品”、“订单”以及“注册”、“订单”等的模型。
想法?