0

在非 Orchard 应用程序中,该模式是隔离项目中的数据模型(和数据访问代码),该项目被域/业务逻辑库、Web 应用程序项目、Web 服务项目等引用。

Orchard 的想法似乎是将数据模型限制在一个模块中,而无意与其他模块的数据模型有任何关系。

“限制”可能有点苛刻或不准确——也许“限制”是这里更好的措辞选择。给定两个模块,A 和 B,在处理模块 A 时,我们可以添加对模块 B 的引用,并使用存储库中的实体。但是当在模块 B 上工作时,需要从模块 A 访问数据,我们不能——至少不能优雅地在框架内。这里存在循环引用问题。

在这种情况下,我倾向于几种方法:

  1. 将两个模块合并为一个模块(并且必须处理潜在的繁重和风险数据迁移)
  2. 无需使用框架或存储库即可直接访问数据
  3. 将所有数据模型放在所有其他自定义模块引用的单个模块中(同样,更多的数据迁移风险)
  4. 在这里举手……

这是对 Orchard 软件设计者对模块和数据关系的意图的正确解释吗?

4

1 回答 1

1

从架构的角度来看,如果您需要两个模块之间的循环依赖,那么这通常意味着它应该是单个模块。

我在类似场景中经常做的一件事是共享抽象定义和接口,而不是共享实现。您可以创建一个仅包含定义数据模型的接口的模块(或只是一个常规程序集)。然后你可以在实现模型的模块和依赖于模型的模块之间共享这个库。唯一的限制是您必须通过接口访问模型,而不是具体的实现。

例如,查看ITitleAspectOrchard 核心中是如何实现的。您可以为您的模型实现类似的接口并在单独的程序集中共享它们。这非常适用于内容部分和内容项。

于 2015-09-24T16:24:17.017 回答