PHP MVC:Data Mapper层的查询构建器类

时间:2017-07-01 15:10:26

标签: php sql oop design-patterns model-view-controller

我在PHP中使用自己的MVC框架。其模型层由

组成
  • Domain objects(也称为“模型”),它封装了业务逻辑和
  • Data mappers,用于在域对象和数据库之间传输数据。

数据映射器抽象类不存在,每个数据映射器类都包含自己的数据访问层实现。数据映射器的类方法包含或将包含复杂的sql语句。

我的问题是:在这种情况下,是使用查询构建器类 - 负责构建sql语句 - 一个限制,还是有一些好的参数,为什么要实施这个组件?

感谢您的帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

1。)一个功能强大的查询构建器可能是一个优点,因为它可以提供一个抽象SQL方言的接口。因此,您可以编写数据映射器实现,而无需考虑将要使用的特定RDBMS。

2.。)在我的一些DAO或Service类中,我可能有两个(或更多)函数对同一个表执行稍微不同的查询。有时,这些查询可能非常大,并且具有许多连接或子查询,而WHERE子句中使用的列只有不同。虽然将这些函数与getEmployeesAgedBetween(Range<Integer> range)getSalariedEmployeesAgedBetween(Range<Integer> range)等签名分开可能是有意义的,但这些函数可以根据您的需要快速增长。为了重构像这样的案例,我的目标是建立一个更健壮的方法来参数化这些方法之间的所有可能的差异。很明显,我只是想在底层制作一个更加动态的WHERE子句,所以我不一定需要一个成熟的查询构建器。但是,WHERE子句构建器非常有用。使用这样的实现,我可以将上述函数重构为具有getEmployees(Where<EmployeeDAO.FIELDS> where)之类签名的单个方法。我实际上已经实现了这样一种方法,我的同事和我自己都很喜欢在以前的实现中使用和维护这些方法。