福勒数据映射器对象创建

我一直在使用数据映射器的域模型的Fowler模式,并且在如何实现CRUD的创建部分时遇到了一些困惑。 我无法利用现有的ORM技术,因为底层数据源是定制系统。 困扰我的领域是当我需要创建一个新对象时如何调用ORM。 我的域图层没有我的ORM可见性,除了我的发现者。

我不确定我是否在正确的轨道上,但以下是我可以看到的唯一选项:

  • 处理创建函数的方式与Fowler查找器完成的方式相同。 在“域模型”图层中为ORM类上的创建方法创建一个接口。 然后让Domain Model调用一个DI容器,并基于该接口实例化ORM类的一个实例。

  • 在ORM中的对象A的水合过程中,将一个委托指向ORM上的对象B的创建方法。要求域对象A是水合的,您可以调用对象A上的委托来调用对象B的映射器上的create方法。

  • ???

  • 我必须错过一些东西,因为这不可能如此复杂。 任何帮助将非常感激。

    谢谢


    如何看待ORM如何解决这个问题? 在支持动态创建对象的语言中,“映射”数据与域对象的关系如何作为单独的配置提供。 这些类是通过反射或字节码库创建的。 我想这取决于你想要制作Data Mapper的普遍程度。 从我可以从原始模式中收集的数据映射器可以存在于每个域对象中。

    也许你正在尝试一个通用的解决方案。 否则,它可能是关于配置一个通用映射关于如何使用反射建立对象的信息。

    那就是ORM层可以处理代表CanonicalClass名称的字符串,以及期望这些类的方法列表。

    传递一个持久化对象可以使用这些信息来检查对象。 使用来自数据库的数据可以使用反射来创建对象。 一些ORM解决方案可能不会以深入的方式创建对象树,而是为延迟获取创建代理。


    如果你的问题只是从类型A映射到类型B,你可能需要考虑AutoMapper。


    回复:“当我需要创建一个新对象时,如何调用底层ORM”

    你有没有看过AGGREGATE ROOT和REPOSITORY模式的想法 - 它们可能会有所帮助。

    作为一个粗略的总结:AGGREGATE ROOT是一个'实体',在系统中具有全局唯一的ID。 大多数情况下,这些是您的应用程序需要'按ID'抓取的唯一对象。 它们通过一个通常在应用程序启动/引导时初始化以了解数据层的REPOSITORY来找到。

    AGGREGATE的工厂ROOT也通常被初始化以了解应用程序启动/引导时的数据层。

    然后,REPOSITORY可以以任何喜欢的方式调解为对象挖掘数据的过程。 REPOSITORY委托给数据层/映射器来获取原始数据,并倾向于将实际的对象重构作业委托给FACTORY(类/方法)来完成该建筑。然后,REPOSITORY返回新重建的AGGREGATE ROOT对象或(collection- )给调用REPOSITORY的find方法的客户端 - 即应用程序。 REPOSITORY是检索和保存AGGREGATE ROOT的接口,并给出它们存储在内存中的行为。

    应用程序可能直接使用FACTORY来创建一个全新的AGGREGATE ROOT对象。

    AGGREGATE ROOT的工厂对ORM / Mapper层有很好的了解,并且在创建一个全新的实体时,它可能会调用某种“序号对象”的服务来获得其唯一的ID。

    AGGREGATE ROOT通常是唯一需要通过全局已知标识查找的域对象,因为任何其他域对象都是:

  • 一次性价值对象 - 像货币价值,或者
  • '聚集ROOT依赖'实体。 也就是说,在AGGREGATE ROOT的上下文中具有唯一唯一ID的对象,这意味着这种对象
  • AGGREGATE ROOT应该是唯一需要在内部找到它/使用它的唯一东西
  • 它们可以通过使用AGGREGATE ROOT的ORM映射器来找到
  • 他们的ID可以由定义其上下文/范围的AGGREGATE ROOT创建
  • 进一步阅读:

    请参阅域驱动设计Eric Evans。

    综合根:http://books.google.co.uk/books?id=7dlaMs0SECsC&lpg=PP1&dq=domain%20driven%20design&pg=PA147#v=onepage&q=&f=false

    Repositroies:http://books.google.co.uk/books?id=7dlaMs0SECsC&lpg=PP1&dq=domain%20driven%20design&pg=PA147#v=onepage&q=&f=false

    链接地址: http://www.djcxy.com/p/96043.html

    上一篇: Fowler Data Mapper Object Creation

    下一篇: How do I control AVAssetWriter to write at the correct FPS