![]() |
1
3
您的模型用于封装业务逻辑,通常用于将数据存储层从体系结构的其他部分(控制器、视图)中抽象出来。 这意味着,任何数据库访问(如sql查询)等都应该理想地包含在模型中。您的控制器将从您的模型(包括orm,它通过模型公开自己)获取数据,而不必自己直接访问数据库。 至于电子邮件的发送,我想这要视情况而定。例如,当用户注册时,我调用一个模型方法将其详细信息插入数据库。然后,此方法触发一封电子邮件发送给他们。通过这种方式,我使电子邮件发送成为注册业务逻辑的一个明确部分(在本例中,这就是我想要的),因此无论模型中谁调用注册方法,系统都不会忘记发送电子邮件。 在表单验证方面,我尝试在orm模型类中指定大多数验证规则。因此,无论谁操纵模型,模型总是对如何验证自己的数据有一些内在的理解。您会注意到orm模型对象已经提供了一种验证其数据的方法。模型本身不需要知道保持跟踪的任何额外验证/回调都可以在模型代码之外完成。 |
![]() |
2
1
IANPHPD(我不是PHP DEV),但是通用编程语言(Java/C)开发人员的观点可能会有所帮助。对我来说,mvc的一个好处是,当您拥有核心业务逻辑和基础架构时,需要向多个ui展示这些逻辑和基础架构,从而促进代码重用。例如,具有Web界面和桌面界面的订单管理系统。在这种情况下,核心逻辑就是模型。这三个接口都有自己的视图和控制器。在c中,将代码结构成核心逻辑位于一组从桌面ui项目和web应用程序项目引用的包/程序集中是很简单的。 我认为即使我很确定某个应用程序不需要另一个用户界面。当我试图决定是否应该在模型或控制器中加入某些内容时,我 问问自己,这个功能是否应该从另一个ui中重用 . 这是一种对php代码有点不自然的思考方式,因为php与web平台的联系非常紧密(据我所知)。不管怎样,这种思维方式仍然有效(分离关注点,不要重复自己的想法)仍然可以应用: php可以支持的第二个“ui”是web服务api . 如果一个特性应该对网站和web服务api都可用,那么它应该在模型中公开。 您可能感兴趣,也可能不感兴趣,但总的来说,这种思维方式与领域驱动的设计完美地结合在一起。 注意:虽然php支持的所有ui都是基于web的,但我仍然会谨慎地将web特定的关注点放在模型中(任何与浏览器会话、cookies、hit tracking等相关的内容),主要是因为这些关注点是以表示为中心的,而不是以业务为中心的,其次是因为at使得以后无论出于什么原因都很难将系统逐段移植到另一种语言/平台。 |