数据映射器设计模式和网关-新手问题


Data Mapper Design Pattern and Gateways - Newbie question

如果我说错了,请纠正我:

如果我们使用Dao/Vo模式或TDG模式,我们将有一个很好的代码组织,为每个(或至少为许多)表提供一个相关的类。

这种方法的问题是在给定的表中数据不是封闭的。我们有一些特定于域的数据,比如findDogBreed();findBookBestSellerAuthor();,上面的模式似乎不能很好地处理这个问题。

一个解决方案是使用映射器。映射器将包含一组与一个表相关的方法和属性,但它们不会仅对该表关闭,也不会与特定的SQL Schema相关。

问题是,如果我们开始抽象所有这些东西,我们将无法访问SQL语法。如果我们需要数据库管理员来处理它呢?在更复杂的查询中,使用映射器可能会导致一个非常混乱的抽象"东西"。

正确吗?如果是这样,我想知道我们有什么路径来找到中间项

当您抽象功能时,您不必失去手动编写SQL的选项,即使是在多层抽象中。

。看看Doctrine,它是受hibernate启发的PHP ORM。它允许您用DQL (Doctrine Query Language)编写查询,该查询可以转换为SQL并自动映射您的实体,但您也可以编写本机SQL(通常是为了性能优化),但您需要自己定义结果映射。