【发布时间】:2013-03-25 02:22:17
【问题描述】:
我在 Zend Framework 2 中使用 Doctrine Module 来实现 ORM 功能。 我正在尝试构建一个基于 Zend Skeleton Application 的模块化架构,它可以覆盖和扩展模块 B 中模块 A 的功能。 我还必须通过新模块中的插件来扩展实体。
现在我的问题是实体的 xml 模式在模块 A 中是非常静态的。不可能用模块 B 覆盖它。 我想实现一个服务,告诉学说模块在哪里可以找到用于特定实体的 xml 模式,但这还不够。
例如,当模块 B 扩展模块 A 但模块 C 也扩展模块 A - 使用哪个 xml 架构 - 来自模块 B 或来自模块 C? 所以我想从两个或多个模式文件中动态构建 xml 模式 - 一个在模块 B 中,一个在模块 C 中。
实现这种架构的最佳方式是什么?编写可以从所有模块调用以收集所有 xml 模式文件的服务是否是一种好方法? 如何告诉 Doctrine 合并这些文件?有没有比接触 Doctrine Module 更好的方法 - 例如在配置文件中?
【问题讨论】:
-
您是否已经考虑定义自定义映射驱动程序?
-
你是这样说的吗: NewsItem (id,title,text) YouTubeItem (id,title,text,youtubelink) DownloadItem (id,title,text,dlllink) CarItem (id,title,text ,马力,最高速度)?我有这样一个用例,我使用 DiscriminatorMapping 来实现这一点。
-
嗨奥克拉穆斯!是的,类似的事情让我想到了。我不确定这是否应该这样做。所以你认为有可能教我的自定义映射驱动程序合并 xml 文件吗?使用服务从多个模块收集 xml 模式是否正确?
-
嗨,山姆!不,那不是我需要的。我认为您在谈论表继承。所以你正在编写一个扩展第一个实体的新实体,但我想要的是用更多字段扩展完全相同的实体。示例:模块 A 定义实体“学生”。学生有 id、matriculationNo、name、age。并与“大学”建立联系。现在模块 B 为应用程序扩展了更多功能,并向“学生”实体添加了一个名为“地址”的关联。该模块称为“地址管理”。
-
@user2205964 如果您的映射逻辑是动态的,是的。问题是映射被缓存了,所以要么禁用缓存(性能差)要么保持启用(不能在运行时可靠地更改映射)
标签: architecture orm doctrine-orm xsd zend-framework2