如何开始一个新的大型ZF2项目?

Mic*_*elo 2 php doctrine-orm zend-framework2

我将用ZF2创建一个新项目.事实上,我将不得不升级ZF1项目,但我决定从头开始.

我的项目非常庞大,已经被来自世界各地的志愿者翻译成10种不同的语言.

我遇到的困难是对ZF2告诉我遵循的模块结构的分析.

该软件允许ISP的世界中的中小企业管理他们的客户数据库,服务,订单,发票,域,技术协助,电子商务,kb等等.

假设ZF2鼓励程序员创建可在其他应用程序中重用的小模块,并且在所有情况下我们尽可能地简化和抽象类的结构,项目数据库中的许多表通过各种外来相互连接键和我无法理解如何使用自己的实体文件创建独立模块,同时与项目断开连接而不会导致崩溃.

例如 :

我的应用运行:

  • 顾客
  • 命令
  • 发票
  • 支付
  • 消息
  • 私人笔记

以下是项目Web界面的屏幕截图: ShineISP订单管理

正如您所看到的,该项目通过嵌入同一项目的各个部分,尽可能地显示法律和秩序情况的概述.最初我想创建一个单独的模块,但我需要你的一些建议.

您建议我采用什么策略来采用大型项目​​的结构?

Ale*_*exP 13

我本人目前正在ZF2中开展一个非常大规模的项目,并认为成功的关键在于采用框架提供的模块化.

我认为有些指针会有所帮助:

  • 创建一个抽象/基础模块

    创建"基础"模块将允许您包含可在任何模块中使用的大多数共享/抽象接口/类.这意味着基本模块是系统中每个其他模块的依赖关系.

  • 模块具有相互依赖性

    一些模块虽然是分开的,但取决于其他模块的功能(付款可能需要有关用户的信息).

    您应该仔细考虑这些服务是什么,并确保尽管它们是共享的,但您不会开始在每个模块中引入耦合/代码重复.

    我广泛使用了forward()插件,它允许我从另一个内部调用另一个控制器操作并构建聚合视图,同时仍然将每个模块封装在自己的模块中.

  • 一个有效的服务层

    实际上,一般的MVC设计原则确保您不在控制器内编写业务逻辑,而是使用注入控制器的"服务"类.如果你不这样做,你会很快发现它难以管理.

  • 创建服务工厂

    首选混凝土工厂类(实现类Zend\ServiceManager\FactoryInterface)与闭包相关联,否则您很快就会发现您需要的工厂数量会膨胀,Module.php而这些工具不能像配置一样缓存 - 这意味着性能受到影响

  • ViewPlugins/Controller插件

    滥用控制器和查看插件的灵活性.这些是封装和注入其他视图/控制器逻辑的极其强大的方法,而无需扩展现有的类.

  • 形式

    表单可能很痛苦,因为需要满足各种依赖关系.我认为它必须创建可重用的fieldsets直接映射到你的域模型(实体).然后将所有输入过滤器/水合器附加到此字段集,如果您希望使用它们,您只需将其附加到表单即可.

    如果你有一个CompanyFieldset例如,你可以在重用CompanyEditFormCompanyCreateFormCompanyEditForm

我项目的一个例子:

 class CompanyCreate extends EntityForm
 {
  public function init()
  {
    $this->add(array(
      'name'    => 'company',
      'type'    => 'Company\Form\CompanyFieldset', // <-- reused!!
      'options' => array(
        'use_as_base_fieldset' => true
      )
    ));
    // Only the button differs between forms!
    $this->add(array(
      'name'     => 'submit',
      'priority' => -100,
      'options'  => array(
        'skipLabel' => true,
      ),
      'attributes' => array(
        'type'  => 'submit',
        'class' => 'btn',
        'value' => 'Create'
      )
    ));
  }
}
Run Code Online (Sandbox Code Playgroud)

就您的模块而言:

我的应用程序运行:客户,订单,发票,付款,消息,私人备注

这似乎是一个很好的自包含模块列表.

我相信还有更多,如果我能想到什么,我会更新