微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据库 – 表模块与域模型

我问了大约 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 );

原文地址:https://www.jb51.cc/mssql/82642.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐