如果你仔细阅读了前面的文档,你会发现 QeePHP 的 ActiveRecord 具有一些与众不同的特性。本章将会为大家阐述 QeePHP 的 ActiveRecord 背后的故事。
按照各种设计模式的书中所述,ActiveRecord 模式适合模型属性与数据表字段一一对应的情况。而且 ActiveRecord 模式的典型特征还包括由模型的基础类自行完成数据库操作,也就是模型对象的持久化。
但是现实世界中的业务逻辑总是很复杂,总有那么一些模型与数据库字段无法一一对应。而且将数据库操作也交给 ActiveRecord 来完成,并不是一个好主意。
最后,模型不但具有各种属性,还存在复杂的行为和对象关系。简单的 ActiveRecord 模式已经无法满足这种需求。因此,QeePHP 中改进了 ActiveRecord 模式,利用“元对象”来“描述”一个模型。
每一个“类型”的模型,都有一个对应的元对象。但是,同一类型的模型对象,都共享同一个元对象。举例来说,User 模型有一个元对象,但不管我们创建多少个 User 模型对象的实例,所有这些 User 对象都共享同一个元对象。而 Goods 模型的所有实例则共享 Goods 模型的元对象。
上面的内容初看上去这有点让人迷惑。但我们可以将元对象看作一个数据表的结构。不管这个数据表有多少条记录,这些记录的结构都是一样的。而另一个数据表的记录则使用该表的结构。
因此,我们可以将元对象看作模型的结构定义。一个元对象定义了一种类型的模型。
事实上,元对象的主要作用并不是用来“定义”模型应该具有什么属性或行为,而是用来管理模型的属性和行为。
元对象管理模型的下列方面: