首先提供一些背景信息:
我正在使用Zend Framework编写PHP项目,我有一些与客户过去会议中的实体关系图。数据库模式是为MySQL编写的,现在是时候在Zend中实现我的模型了。我对Zend还比较陌生,不知道如何优雅地开始编写这段代码。
在阅读Zend文档时,我注意到快速指南使用了“数据网关”模式,但是他们的Zend_DB参考页面没有。
我正在使用Zend Framework编写PHP项目,我有一些与客户过去会议中的实体关系图。数据库模式是为MySQL编写的,现在是时候在Zend中实现我的模型了。我对Zend还比较陌生,不知道如何优雅地开始编写这段代码。
在阅读Zend文档时,我注意到快速指南使用了“数据网关”模式,但是他们的Zend_DB参考页面没有。
// Data Gateway Sample
// <application/models/UserMapper.php>
class Application_Model_UserMapper()
{
// ... Methods to read/write from DB
}
// <application/models/DbTable/Users.php>
class Application_Model_DbTable_Users
{
// Relationship infromation etc.
}
// <application/models/User.php>
class Application_Model_User
{
// At last, model specific data
// using UserMapper->find($id, $model);
}
在浏览stackoverflow一段时间,希望找到如何最有效地组织模型的指针后,我发现了另一个不同的推荐解决方案。
现在上面链接的解决方案看起来非常干净,但在我开始编写代码之前,仍然有一个问题:
我应该使用Row_Abstract子类来存储数据模型,还是应该创建没有其他目的而只存储检索数据的单独模型?
后者似乎需要大量重复努力(Model_DbTable,Model,Mapper,[Row?])
// What I have in mind
// <application/models/DbTable/Users.php>
class Application_Model_DbTable_Users
{
// Relationship infromation etc.
}
// <application/models/User.php
class Application_Model_User extends Zend_Db_Table_Row_Abstract
{
// Model stuff here
// Relationship fetch helpers here
// ...?
}
// Perhaps a Rowset_Abstract class if it is ever needed?