在非Orchard应用程序上,模式是隔离项目中的数据模型(和数据访问代码),该项目由域/业务逻辑库,Web应用程序项目,Web服务项目等引用。
Orchard 的想法似乎是将数据模型限制在一个模块中,而无意与其他模块的数据模型有任何关系。
“限制”可能有点苛刻或不准确 - 也许“限制”是这里措辞的更好选择。给定两个模块A和B,并且在处理模块A时,我们可以添加对模块B的引用,并使用存储库来实现它的实体。但是当处理模块B时,需要从模块A访问数据时,我们不能 - 至少在框架内不优雅。这里存在循环引用问题。
在这种情况下,我倾向于采取几种方法:
这是否正确解释了Orchard软件设计人员对模块和数据关系的意图?
答案 0 :(得分:1)
从架构的角度来看,如果你需要两个模块之间的循环依赖关系,那么这通常意味着它应该是一个单独的模块。
我在类似场景中经常做的一件事是共享抽象定义和接口,而不是共享实现。您可以创建一个模块(或只是一个常规程序集),它只包含定义数据模型的接口。然后,您可以在实现模型的模块和依赖于模型的模块之间共享此库。唯一的限制是您必须通过接口访问模型,而不是具体的实现。
例如,查看在Orchard核心中如何实现ITitleAspect
。您可以为模型实现类似的接口,并在单独的程序集中共享它们。这非常适合内容部分和内容项。