网站开发必学的技巧有哪些,营销型网站建设iop,技术外包平台,有限公司网站建设 互成网络地址 四川好吧#xff0c;在处理Data Access Layer #xff0c;您必须考虑的第一件事是该层还具有子层 #xff0c;在现代框架中很难找到名为“ dal”的文件夹(我以Zend为基础框架和Symfony)。其次#xff0c;关于ActiveRecord #xff0c;您必须知道默认情况下Zend Frameworks 不会…好吧在处理Data Access Layer 您必须考虑的第一件事是该层还具有子层 在现代框架中很难找到名为“ dal”的文件夹(我以Zend为基础框架和Symfony)。其次关于ActiveRecord 您必须知道默认情况下Zend Frameworks 不会实现它 。 大多数教程都采用最简单的方法来教授新概念。 通过简单的示例 业务逻辑的数量很少因此它们没有添加另一层复杂性(在数据库和模型对象之间进行映射)而是通过两种基本模式构成了domain layer (模型) Table Data Gateway和Row Data Gateway 。 对于初学者来说这是足够的信息。在对其进行分析之后您将看到ActiveRecord和行数据网关模式之间的一些相似之处。 主要区别在于ActiveRecord对象(可持久实体) 承载业务逻辑而行数据网关仅表示数据库中的一行 。 如果在代表数据库行的对象上添加业务逻辑则它将成为ActiveRecord对象。此外在Zend Framework 快速入门之后 在域模型部分 您将意识到还有另一个组件它使用了Data Mapper Pattern 。因此如果您的DAL的主要目的是在业务对象(模型)和存储之间映射数据则此任务的职责将委托给数据映射器 如下所示class Application_Model_GuestbookMapper{public function save(Application_Model_Guestbook $guestbook);public function find($id);public function fetchAll();}这些方法将与Database Abstraction Layer进行交互并使用数据填充域对象。 遵循以下原则public function find($id, Application_Model_Guestbook $guestbook){$result $this-getDbTable()-find($id);if (0 count($result)) {return;}$row $result-current();$guestbook-setId($row-id)-setEmail($row-email)-setComment($row-comment)-setCreated($row-created);}如您所见 Data Mappers与Zend_Db_Table实例进行交互该实例使用Table Data Gateway Pattern进行交互。 另一方面 $this-getDbTable-find()返回Zend_Db_Table_Row的实例该实例实现行数据网关模式 (这是代表数据库行的对象)。提示 domain object本身的guestbook实体 并没有通过在DataMapper的的find()方法创建的 相反这个想法是 对象的创建工厂的任务 你必须注入的依赖以实现所谓的依赖倒置原则(DIP) (SOLID原则的一部分)。 但这是另一个问题超出了问题的范围。映射的东西从这里开始$guestbook-setId($row-id)-setEmail($row-email)-setComment($row-comment)-setCreated($row-created);到目前为止我想我已经回答了您的主要问题您的结构如下application/models/DbTable/Guestbook.phpapplication/models/Guestbook.phpapplication/models/GuestbookMapper.php因此如ZF快速入门中所示class GuestbookController extends Zend_Controller_Action{public function indexAction(){$guestbook new Application_Model_GuestbookMapper();$this-view-entries $guestbook-fetchAll();}}也许您想为数据映射器创建一个单独的文件夹。 只是改变application/models/GuestbookMapper.php至application/models/DataMapper/GuestbookMapper.php班级名称将是class Application_Model_DataMapper_GuestbookMapper我已经看到您想将domain model objects分成模块。 同样您可能需要遵循ZF的modules目录和命名空间指南 。最后提示我花了很多时间编写自己的数据映射器以最终意识到当应用程序与许多相关实体一起增长时维护对象映射是噩梦 。 (例如包含对用户对象的引用的Account对象包含角色的用户等等)在这一点上编写映射内容并不容易。 因此如果您确实想要一个真正的对象关系映射器我强烈建议您首先研究遗留框架如何执行此类任务并可能使用它。 因此使用Doctrine 2可以节省一些时间这是迄今为止使用DataMapper模式的最佳(IMO) 之一 。而已。 您仍然可以使用/dal目录存储DataMappers只需注册名称空间 以便自动加载器可以找到它。