回复:“当我需要创建一个新对象时如何调用底层 ORM”
您是否研究过 AGGREGATE ROOT 和 REPOSITORY 模式的想法 - 它们可能会有所帮助。
作为粗略的总结:AGGREGATE ROOT 是一个“实体”,在系统中具有全局唯一 ID。大多数时候,这些是您的应用程序需要“按 id”获取的唯一对象。它们是通过一个存储库找到的,该存储库通常被初始化以了解应用程序启动/引导时的数据层。
聚合根的工厂通常也被初始化以了解应用程序启动/引导时的数据层。
然后,存储库可以以它喜欢的任何方式调解为对象挖掘数据的过程。REPOSITORY 委托给数据层/映射器以获取原始数据,并倾向于将对象重构的实际工作委托给 FACTORY(类/方法)来进行构建。然后,REPOSITORY 返回新重构的 AGGREGATE ROOT 对象或(collection- of) 到调用 REPOSITORY 的 find 方法的客户端 - 即应用程序。REPOSITORY 是检索和保存 AGGREGATE ROOT 的接口,并给出了它们存储在内存中的行为。
但是,应用程序可能会直接使用 FACTORY 来创建全新的 AGGREGATE ROOT 对象。
AGGREGATE ROOT 的工厂对 ORM/Mapper 层有很好的了解,并且在创建一个全新的实体时,它可能会调用某种“数字序列对象”的服务来获取其唯一 ID。
聚合根通常是您需要“按全局已知 ID 查找”的唯一类型的域对象,因为任何其他域对象都是:
- 一次性价值对象 - 如货币价值,或
- “聚合根依赖”实体。即具有仅在 AGGREGATE ROOT 上下文中唯一的 id 的对象,这意味着
- AGGREGATE ROOT 应该是唯一需要找到/使用它的东西 - 在内部
- 可以使用 AGGREGATE ROOT 的 ORM Mapper 找到它们
- 它们的 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
存储库:http: //books.google.co.uk/books ?id=7dlaMs0SECsC&lpg=PP1&dq=domain%20driven%20design&pg=PA147#v=onepage&q=&f=false