我目前正在设计可以通过应用程序插件扩展域模型和存储库的解决方案。现在,我遇到了一些我在下面列出的问题。
我的第一个问题是使域模型可扩展。我正在考虑在这里使用继承,但老实说,我不知道如何利用多个插件程序集扩展同一个域对象。我有点倾向于使每个域对象都是局部的,并允许插件以这种方式扩展它。如果我有多个插件扩展同一个域对象,我不必担心为每个插件加载不同的扩展域程序集。在运行时我仍然只有一个合并的域对象。对此有什么想法吗?
另一个问题是扩展 NHibernate 映射文件。我可以让每个程序集为其扩展的域对象嵌入映射文件,并让我的 NHibernate 管理器加载它,而不是核心域中提供的那个。再一次,问题是如果我有多个插件扩展同一个域对象。我可以让一个插件覆盖另一个插件的映射文件。我对最后一个问题的解决方案不是很好,但我正在考虑在插件程序集中包含一个校验和,作为它在扩展它之前使用的原始映射文件的签名。我可以在加载期间验证此校验和,并且仅在校验和匹配时才加载插件映射。非常难看,但至少我不会覆盖与插件程序集中用于扩展的基本地图不同的任何地图。
无论如何,我想听听你们对此的看法。谢谢!