【问题标题】:Alternative to TableGateway for Zend Framework 2Zend Framework 2 的 TableGateway 替代方案
【发布时间】:2014-05-26 00:12:45
【问题描述】:

我正在使用 Zend framework 2 来创建网页。

通过 TableGateway 我正在访问我的 PostgreSQL DB

除了 TableGateway 之外,有没有可以在 Zend 框架 2 中有效使用的替代方法,并且具有易于使用的文档和资料?

我正试图摆脱 教义 2除非你能说服我否则)。

我们将不胜感激。

【问题讨论】:

  • 像 mongo 这样的 Nosql 解决方案怎么样?还是必须是postgre?如果不是 github.com/phly/PhlyMongo 可能是另一种选择。
  • 需要更多信息来说明您为什么“试图摆脱 Doctrine”,因为它可能会改变我的答案。我也对“易于使用的文档和东西”感到困惑。 Zend 有一些最好的(它不是完美)框架文档。您是否以更通用的方式研究过 TableGateway 模式?它将毫无疑问地帮助您了解 ZF 的具体实现,并可能使文档更清晰。
  • @AlexP 是的,我知道 tablegateway 很容易使用,但项目要求告诉我这样做。 . .学说用起来不是那么沉重和复杂吗?

标签: php postgresql doctrine-orm zend-framework2 tablegateway


【解决方案1】:

正如我所评论的,我使用了 3 种方法来处理数据访问。

  • TableGateway 模式还可以,但对于大型应用程序来说维护起来并不容易。

  • 另一种常用的模式是数据映射模式,为此您可以使用 AbstractDbMapper 和 hydrator 进行映射。 AbstracDbMapper Link

  • 实体模式,如Doctrine

我最终决定使用原则,因为它很容易维护,你可以节省几个小时的代码,但如果你不想使用原则,我认为数据映射器模式是最好的选择。

【讨论】:

    【解决方案2】:

    真正令人困惑的是什么?如果您使用 Zend MVC,那么 Service Manager/Locator 会在任何地方使用,这也是定义 TableGateway/DB 模型的方式。模型的代码仍然很好理解。我不明白真正令人困惑的地方。

    我可以建议原始的 ZF 2.0 样式更简单的 getServiceConfig 进行更改,它对我来说一直有效。

    'Album\Model\AlbumTable' =>  function($sm) {
        $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
        $table = new Model\AlbumTable($dbAdapter);
        return $table;
    },
    

    代替

    'Album\Model\AlbumTable' =>  function($sm) {
         $tableGateway = $sm->get('AlbumTableGateway');
         $table = new AlbumTable($tableGateway);
         return $table;
     },
     'AlbumTableGateway' => function ($sm) {
         $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
         $resultSetPrototype = new ResultSet();
         $resultSetPrototype->setArrayObjectPrototype(new Album());
         return new TableGateway('album', $dbAdapter, null, $resultSetPrototype);
     },
    

    我用上一个没有遇到任何问题,但不能说其他人是否遇到过?

    【讨论】:

    • 我决定改变已经太晚了。寻找替代方案。所以这不行。
    • TableGateway 模式很简单,但肯定不是大型应用程序的最佳模式。我试图找到另一个模式示例,例如带有 AbstractDbMapper github.com/ZF-Commons/ZfcBase/blob/master/src/ZfcBase/Mapper/… 的映射器类,我最终决定使用教义2。
    猜你喜欢
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    相关资源
    最近更新 更多