
在MVC中模型应该如何构建?
在MVC中,模型代表应用程序的业务逻辑和数据。它封装了特定领域的逻辑和规则,使应用程序能够在不依赖 UI 或控制器的情况下执行任务并做出决策。
模型的概念:
模型不是类或对象。它是由三个主要元素组成的层:
- 域对象:表示业务实体并包含特定于问题域的逻辑。
- 数据映射器:处理数据持久性以及与外部存储的交互,例如数据库。
- 服务:编排领域对象和数据映射器之间的交互,提供与业务交互的更高级别的接口logic.
关注点分离:
- 模型层与UI层(视图和控制器)分离.
- 与模型的通信仅通过服务进行,确保明确的关注点分离并防止域逻辑泄漏到 UI 或控制器中代码。
- 这种分离促进了单一职责原则 (SRP)、灵活性和更容易的可测试性。
访问模型:
- 在视图和控制器中,您可以使用 Symfony 的 DI 容器或Auryn。
- 服务可以注入到构造函数中或通过工厂访问。
- 此方法确保所有必需的服务可供这些组件使用。
修改模型状态:
- 控制器负责处理用户输入并修改模型状态。
- 它们调用服务方法,服务方法又与域对象和数据映射器交互以执行必要的逻辑操作。
数据持久性:
- 域对象代表业务实体,但不知道存储。
- 数据映射器处理数据持久性和从外部检索存储。
- 这种分离允许业务逻辑保持独立于所使用的特定存储技术。
分离的好处:
- 通过为每一层分配明确的职责来强制实施SRP。
- 通过隔离业务来提高代码的可读性和可测试性逻辑。
- 提供修改业务逻辑或数据存储的灵活性,而不影响其他组件。
- 通过提供用于访问模型服务的一致接口来简化外部 API 的开发。
附加注释:
- 数据库表并不总是直接映射到域对象和数据映射器。
- 视图不是模板,但处理表示逻辑和模板选择。
- 每个页面或屏幕的视图和控制器之间应该有 1:1 的关系。