Orm 如何在实际应用程序中使用ZF2博客教程中的模型结构?

Orm 如何在实际应用程序中使用ZF2博客教程中的模型结构?,orm,model,zend-framework2,data-access-layer,datamapper,Orm,Model,Zend Framework2,Data Access Layer,Datamapper,我目前正在开发一个ZF2应用程序,并希望实现它与。可能在未来,DAL将被条令所取代,但在第一个版本中,该模型应该像博客应用程序中一样工作:Service+Mapper+Data Objects 在Blog应用程序中,方法ZendDbSqlMapper#save(…)获取一个数据对象作为参数(就像Mapper的所有其他公共方法一样),提取它,然后将数据写入数据库。但我的现实情况有点复杂,我不(但想)理解,这种方法是否仍然适用于它,以及如何适用于它 应用程序应主要处理(保存和检索)某些技术服务的请求

我目前正在开发一个ZF2应用程序,并希望实现它与。可能在未来,DAL将被条令所取代,但在第一个版本中,该模型应该像博客应用程序中一样工作:
Service+Mapper+Data Objects

在Blog应用程序中,方法
ZendDbSqlMapper#save(…)
获取一个数据对象作为参数(就像
Mapper
的所有其他公共方法一样),提取它,然后将数据写入数据库。但我的现实情况有点复杂,我不(但想)理解,这种方法是否仍然适用于它,以及如何适用于它

应用程序应主要处理(保存和检索)某些技术服务的请求/订单。(在下一步中,它们由员工手动处理并实施。)因此,常见情况是保存(更新/创建)订单

物理模型如下所示:

如您所见,
订单
有一些依赖项,它们也有依赖项等。在创建
订单
时,我必须首先创建一个
逻辑连接
。对于
逻辑连接
需要一个(抽象)
物理连接
和一个具体的物理连接变体,如
PhysicalConnectionX
。(它实现了。)此外,
逻辑连接
需要一个新的
客户
(简化:每次新订单都需要一个新客户)和一个带有具体端点变量的
端点
(也是一个CTI实现)。数据模型左侧的表只是基本数据,应该/不能更改。(当然,更新更为复杂,因为我必须检查每个相关对象(如果已经存在),以避免为同一端点创建多个客户。)

我的第一个想法是这样实施:

  • 转换输入,模型从表单中获取(我不使用
    Zend\Collection
    ,因为我的for的结构与我的对象和数据库完全不同)
  • 为它的
    顺序
    对象水合(递归水合已经实现)
  • 为每种对象类型创建
    映射器
  • 让每个
    Mapper#save(…)
    • 在所依赖对象的映射器上调用
      save(…)
    • 然后只关心它的目标
伪代码:

MyDataObjectA {
    $id;
    $myObjectB;
}

MyDataObjectB {
    $id;
}

MapperA {
    save($dataObjectA) {
        saving $dataObjectA
        calling MapperA#save($dataObjectA->getObjectB() )
    }
}

MapperB {
    save($dataObjectB) {
        saving $dataObjectB
    }
}
这是一个大量的代码和每一个案件都必须手动处理。(我也不确定,但可能我在依赖上下文的保存方面会遇到一些问题,因为这种方法不能简化上下文。)但是——我不相信,这是一个推荐的解决方案

嗯,这可能有点恐怖分子的味道。但是ZF2博客教程中的模型结构是什么?这是否适用于这种情况?或者它只对非常简单的结构有用,而对真实世界的应用程序几乎没有用处?(然后我会问——我们真的需要本教程吗,如果它展示了一种几乎永远无法在实际应用中使用的方法的话?)或者也许我只是理解了一些错误,有一种更好的(高效、优雅等)方法