我问了大约
Choosing a method to store user profiles在另一天,并收到一个
interesting response from David Thomas Garcia建议我使用表模块的设计模式.看起来这可能是我想要的方向.所有与Google结交的东西似乎都是相当高水平的讨论,所以如果有人可以指出一些例子的方向,或者给我一个更好的想法,那将是令人敬畏的坚果和螺栓.
解决方法
Martin Fowler最好的参考文献是“企业应用程序架构模式”
以下是表模块部分的摘录:
A Table Module organizes domain
logic with one class per table in the
database,and a single instance of a
class contains the varIoUs procedures
that will act on the data. The
primary distinction with Domain
Model is that,if you have many
orders,a Domain Model will have one
order object per order while a Table
Module will have one object to handle
all orders.
表模块在您为用户配置文件数据描述的灵活数据库架构中特别有用,基本上是Entity-Attribute-Value设计.
通常,如果使用域模型,底层表中的每一行都将成为一个对象实例.由于您将用户配置文件信息存储在多行中,因此最终必须创建许多域模型对象,而您真正需要的是封装所有用户属性的一个对象.
相反,表模块使您更容易地编写适用于底层数据库表中多行的逻辑.如果您为给定用户创建了一个配置文件,那么您可以指定所有这些属性,而Table Module类将具有将其转换为一系列INSERT语句的代码,每个属性一行.
$table->setUserProfile( $userid,array('firstname'=>'Kevin','lastname'=>'Loney') );
同样,查询给定用户的配置文件将使用表模块将查询结果集的多行映射到对象成员.
$hashArray = $table->getUserProfile( $userid );