gpt4 book ai didi

nhibernate - 使用 NHibernate 的可扩展领域模型

转载 作者:行者123 更新时间:2023-12-05 01:17:05 24 4
gpt4 key购买 nike

我目前正在设计可以通过应用程序插件扩展域模型和存储库的解决方案。现在,我遇到了下面列出的一些问题。

  1. 我的第一个问题是使域模型可扩展。我正在考虑在这里使用继承,但老实说,我不知道如何利用扩展同一域对象的多个插件程序集。我有点倾向于使每个域对象成为部分对象并允许插件以这种方式扩展它。如果我有多个插件扩展同一个域对象,我就不必担心为每个插件加载不同的扩展域程序集。我在运行时仍然只有一个合并的域对象。对此有什么想法吗?

  2. 另一个问题是扩展 NHibernate 映射文件。我可以为它正在扩展的域对象让每个程序集嵌入映射文件,并让我的 NHibernate 管理器加载它,而不是核心域中提供的那个。再一次,问题是如果我有多个插件扩展同一个域对象怎么办。我可以让一个插件覆盖另一个的映射文件。我对最后一个问题的解决方案不是很好,但我正在考虑在插件程序集中包含一个校验和作为扩展它之前使用的原始映射文件的签名。我可以在加载期间验证此校验和,并且仅在校验和匹配时才加载插件映射。非常丑陋,但至少我不会覆盖任何与插件程序集中用于扩展的基础 map 不同的 map 。

无论如何,我想听听你们对此有何看法。谢谢!

最佳答案

好消息是,您所要求的是可能的,而且管理起来并不难。

关于插件管理,你可以看看Microsoft Prism(http://msdn.microsoft.com/fr-fr/magazine/cc785479.aspx),它是模块化应用程序开发的几个不错的特性。

关于 1. 您可以在单独的映射中映射子类,在单独的程序集中查找 NH 文档。子类的单独映射文件如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<subclass name="YourClassFullName, YourPluginAssemblyName"
extends="YourParentClassFullName, TheAssemblyWhereYourBaseClassIsDefined"
discriminator-value="whateveryouwant">
... add your subclass mapping here ...
</subclass>
</hibernate-mapping>

关于 2. 你可以保留你的核心域映射。一种更简单的方法是创建一个服务(比方说 IMappingLoader),您的插件可以使用它来注册您的额外映射(无需覆盖基类映射)。您对该服务的实现会将您的映射添加到 NH 配置类。例如,在 Microsoft Prism 中,您所有的插件都必须实现 IModule 接口(interface),该接口(interface)在加载时调用 Initialize() 函数。此函数是调用 IMappingLoader 服务的理想位置。

希望对您有所帮助。

关于nhibernate - 使用 NHibernate 的可扩展领域模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1320094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com