Php 使用Zend_Db和多个表
我有一个标准化的数据库,在互联网上存储文件的位置。一个文件可能有多个位置分布在不同的站点上。我将URL存储为两部分(Site.UrlStart、FileLocation.UrlEnd)。UrlEnd是该文件(对于站点)唯一的部分 简化的数据库结构: 我使用从Zend_Db_Table_Abstract继承的表类作为我的ORM(如果是这样的话) 问题是,检索位置数据(例如url)需要使用多个表,就我所知,我要么使用两个表类(从而暴露我的表结构),要么将sql分散到我的应用程序中,这两种方法听起来都不吸引人 我能看到的唯一解决方案是创建一个类似Zend_Db_Table_Abstract(可能继承自它?)的外观,并隐藏数据实际上位于两个表上的事实 我的问题如下:Php 使用Zend_Db和多个表,php,oop,zend-framework,zend-db,Php,Oop,Zend Framework,Zend Db,我有一个标准化的数据库,在互联网上存储文件的位置。一个文件可能有多个位置分布在不同的站点上。我将URL存储为两部分(Site.UrlStart、FileLocation.UrlEnd)。UrlEnd是该文件(对于站点)唯一的部分 简化的数据库结构: 我使用从Zend_Db_Table_Abstract继承的表类作为我的ORM(如果是这样的话) 问题是,检索位置数据(例如url)需要使用多个表,就我所知,我要么使用两个表类(从而暴露我的表结构),要么将sql分散到我的应用程序中,这两种方法听起来
- 我创建façade类的方向正确吗(还有其他选择吗)
- facade类是否应该继承自
Zend\u Db\u Table\u Abstract
主要的一点是从心理上脱离Zend Db Table的主导地位——它只是一个次要的玩家,是Db表的一种表现形式,仅此而已。Zend Db Table并不是一个非常简单的用例之外的ORM。它意味着与系统中的每个表密切相关。因此,每个表都有一个Zend_Db_Table类 为了更好地管理全局,你需要另一种类型的课程 因此,是的,关于使用一种立面,您的立场是正确的。 但是,我不会让它从Zend_Db_Table_Abstract继承,因为它有一套非常不同的职责。 也许值得研究一下数据映射器模式——它有点像一个外表(Martin Fowler,企业架构模式)。每个“域实体类型”都有一个映射器(不一定与每个表有一个映射器相同),可能还有另一个额外的映射器,用于整个类型族 Zend Framework的简介页面上有一个简单的数据映射器模式示例: 请注意应用程序\模型\留言簿页面如何使用应用程序\模型\数据库\留言簿,而不是对其进行扩展 然而,这是一个非常简单的例子,有时会给你留下更多的问题而不是答案 另一个学习如何将数据库映射到模型的好资源是Scott Ambler的 网上文章: 这涵盖了处理数据到数据、对象到对象以及数据到对象之间关系的过程: 它还涉及到数据映射器模式,是少数几个可以很好地解释如何将类层次结构映射到db表的地方之一 Eric Evans还描述了“存储库”的使用,它是位于模型和数据层之间的外观。如果使用数据映射器制作一个成熟的ORM看起来令人望而生畏,那么这可能是一个快速的起点。通常,每个重要的域实体(即聚合)都有一个存储库