小编Bre*_*t C的帖子

使用DRY原则帮助在服务类中创建灵活的基础"查找"方法

多年来,我一直在重复实现相同的代码(使用进化)而没有找到一些干净,有效,抽象出来的方法.

该模式是我的服务层中的基本'find [Type] s'方法,它将选择查询创建抽象到服务中的单个点,但支持快速创建更易于使用的代理方法的能力(请参阅示例PostServivce :: getPostById ()方法如下).

不幸的是,到目前为止,我一直无法满足这些目标:

  1. 减少由不同的重新实现引入的错误的可能性
  2. 将有效/无效参数选项公开给IDE以进行自动完成
  3. 遵循DRY原则

我最近的实现通常类似于以下示例.该方法采用一系列条件和一组选项,并从中创建并执行Doctrine_Query(我今天在这里大部分重写了这一点,因此可能存在一些拼写错误/语法错误,它不是直接剪切和粘贴).

class PostService
{
    /* ... */

    /**
     * Return a set of Posts
     *
     * @param Array $conditions Optional. An array of conditions in the format
     *                          array('condition1' => 'value', ...)
     * @param Array $options    Optional. An array of options 
     * @return Array An array of post objects or false if no matches for conditions
     */
    public function getPosts($conditions = array(), $options = array()) {
        $defaultOptions =  = …
Run Code Online (Sandbox Code Playgroud)

php zend-framework query-builder service-layer doctrine-orm

5
推荐指数
1
解决办法
533
查看次数