如果我错了,请纠正我:
如果我们使用Dao / Vo模式或TDG模式,我们将拥有一个很好的代码组织,通过为每个(或至少很多)表创建一个相关的类。
这种方法的问题是或者数据未在给定表内关闭。我们有一些特定于域的数据,例如findDogBreed();
或findBookBestSellerAuthor();
,上述模式似乎并不能很好地解决这个问题。
一旦解决方案是使用Mappers。 Mappers将包含一组与一个表相关的方法和属性,但它们不会仅关闭到该表,也不会与特定的SQL模式相关。
问题是,如果我们开始抽象所有这些东西,我们将无法访问SQL语法。如果我们需要数据库管理员来处理它会怎么样?对于更复杂的查询,使用映射器可能会导致一个非常混乱的抽象“事物”。
这是对的吗?如果是这样,我想知道我们在这里找到一个中期的路径。
答案 0 :(得分:1)
在抽象功能时,您不必失去手动编写SQL的选项,即使在多级抽象上也是如此。
E.g。看看Doctrine,它是Hibernate启发的用于PHP的ORM。它允许您以DQL(Doctrine查询语言)编写查询,转换为SQL并自动映射您的实体,但您也可以编写native SQL(最常用于性能优化),但您需要通过以下方式定义结果映射:自己。