【问题标题】:Creating/compling .net data class within an application在应用程序中创建/编译 .net 数据类
【发布时间】:2010-03-19 00:16:04
【问题描述】:

是否有一种模式、Xml 结构、架构技术可以用来创建简单的数据持有者类代码,我们可以反序列化到/从并在运行时执行这些代码?

我们正处于 .Net 项目的早期设计阶段,我们的目标之一是通过配置使最终系统无需开发人员即可扩展。我们需要支持新的数据源,通常作为 Xml 消息传递。目前我们将消息转换/反序列化为简单的类,然后使用现有的语言可以根据需要操作这些类。

当您让开发人员将 Xml 映射到简单类、创建类然后编写反序列化时,这很有效,但对于管理员来说它是不可扩展的。我们的目标用户是高端 DBA 和/或网络管理员 - 可以处理 Xml 但可能不懂 C# 的人。

【问题讨论】:

  • 我不确定我是否在这里关注你(也许其他人会更好)。你有更具体的例子吗?也许您希望 XML 和类如何协同工作的 sudo-example?看起来确实很有趣!
  • 我们正处于 .Net 项目的早期设计阶段,我们的目标之一是通过配置使生成的系统无需开发人员即可扩展。走这条路。你不会喜欢它通向的地方。相反,应致力于制作一个健壮、可测试、文档化的应用程序,让开发人员易于维护(因此成本低廉)。
  • @Aaronaught:误会?听起来他们想从客户的角度使用 XML 来实现可扩展性,而不是让客户聘请软件开发人员。并不是说他们想要制作不需要开发人员维护的应用程序。至少我是这么解释的。
  • @Alan:我认为这里没有太大的误解空间。他明确表示,“通过配置使最终的系统无需开发人员即可扩展。”在我的职业生涯中,我已经多次听到这句话,知道它的含义 - 以及它总是如何结束。
  • 我和 Alan 一起做这个,最重要的是,新数据 = 配置而不是新代码。

标签: c# architecture xml-serialization runtime


【解决方案1】:

您不必编写任何类或反序列化例程。如果您有架构,则可以使用 Visual Studio 中的 XSD.exe 工具自动创建类,并使用内置的 .NET XML 序列化/反序列化。

现在如何在每次不重新编译的情况下发生这种情况...

这并不理想,但这应该可以:

假设您的 DBA 可以为 XML 编写模式。 您可以编写一个工具来获取架构,通过 XSD 运行它,在其上添加一些包装器代码,然后创建一个可以在您的应用程序中使用的 dll。

这可以是手动过程(即管理员通过电子邮件向您发送架构),或者您可以将该工具作为应用程序的一部分分发。

此外,您可以从现有的 XML 文档中推断出架构。

【讨论】:

    【解决方案2】:

    也许是DataTable?还是只使用 xml DOM(XmlDocument 或 XDocument)作为数据存储?当然,两者都不是理想的——但是如果你的 real 代码能够看到它,那么在运行时创建一个类型just 就没有什么意义了。额外的类类型有什么用途?在其他问题中,您必须使用大量反思才能与之交谈。

    另一种选择是自定义属性包和IXmlSerializable,但这很费力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多