前几天我询问选择一种存储用户配置文件的方法,并收到David Thomas Garcia的一个有趣的回复,建议我使用Table Module设计模式.看起来这可能是我想要的方向.我在Google上发现的所有内容似乎都是相当高级别的讨论,所以如果有人能指出我的某些例子,或者让我更好地了解所涉及的基本要素,那将是非常棒的.
最好的参考是Martin Fowler的"企业应用架构模式":
以下是表格模块部分的摘录:
甲表模块组织域逻辑与数据库中的每个表一类,和一类的单个实例包含将所述数据作用的各种程序.与域模型的主要区别在于,如果您有许多订单,域模型将为每个订单提供一个订单对象,而表模块将有一个对象来处理所有订单.
表模块在您为用户配置文件数据描述的灵活数据库体系结构中特别有用,基本上是实体 - 属性 - 值设计.
通常,如果使用域模型,则基础表中的每一行都将成为一个对象实例.由于您将用户配置文件信息存储在多行中,因此您最终必须创建许多域模型对象,而您真正想要的是一个封装所有用户属性的对象.
相反,表模块使您可以更轻松地编写适用于底层数据库表中多行的逻辑.如果为给定用户创建配置文件,则指定所有这些属性,Table Module类将具有将其转换为一系列INSERT
语句的代码,每个属性一行.
$table->setUserProfile( $userid, array('firstname'=>'Kevin', 'lastname'=>'Loney') );
同样,查询给定用户的配置文件将使用表模块将查询结果集的多行映射到对象成员.
$hashArray = $table->getUserProfile( $userid );