gpt4 book ai didi

design-patterns - 对象到 xml 转换的设计模式

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

我们有一组不同的 POCO 实体,它们代表应用程序的域模型。现在我们需要提出一个 xml 表示来编译来自不同实体的数据,这些数据将被其他应用程序使用。我们有一个关于最终表示应该是什么样子的引用 xml。

基于上述,我有两个问题主要与最佳实践和优化有关:

  • 给定目标 xml 结构,根据来自不同实体的数据创建 xml 文件的最佳和推荐方法是什么?我应该尝试使用 xsl 转换还是基于 xsd 生成目标类并使用自定义翻译等。
  • 由于这是 POC 练习的一部分,XML 转换最终将被数据库中的数据持久性或/和到 JSON 对象的转换所取代。我想知道是否可以使用某种设计模式来抽象出目标实现,这样当 xml 生成例程被 DAL 调用或 JSON 翻译代码替换时,主代码就不会受到影响。有任何想法吗?
  • 最佳答案

    使用 MS xsd tool 基于目标 xsd 创建目标模型 (POCO-ish)并通过隐藏翻译实现的外观在代码中进行转换。

    为了简化转换,您可以使用例如 Automapper on github .

    从目标模型可以很容易地生成 XML、JSON 或使用例如 Entity Framework 来持久化数据。

    通用 JSON 序列化示例:

        public static string GetString<T>(T value)
    {
    using (var ms = new MemoryStream())
    {
    var ser = new DataContractJsonSerializer(typeof(T));
    ser.WriteObject(ms, value);
    byte[] json = ms.ToArray();
    ms.Close();
    return Encoding.UTF8.GetString(json, 0, json.Length);
    }
    }

    我过去曾尝试过 XSLT 路线,虽然它很强大,但它往往会很快变得复杂。使用上面的目标模型,您将能够在需要时调试您的转换,它还为您提供了一系列前进的机会。

    回复:AutoMapper ,在这种情况下,当目标结构复杂并且可能与源结构不同时,很难让 AutoMapper 直接映射所有内容,我通常会创建一个 Orchestrator/SuperMapper 来负责内部使用 AutoMapper 的整体结构/映射。

    提示:如果一个目标需要多个值,可以将其设置为同一个对象的一系列映射,参见 question/answer .

    如果没有考虑到特定的结构,很难给出一个好的通用答案。

    回复:门面维基百科对这种模式有很好的定义>> Facade on Wikipedia
    但简而言之,为您的 Orchestrator/SupperMapper 定义最简单的接口(interface),这样您就可以将翻译结构的内部工作与应用程序的其余部分分开。这样,当您的需求发生变化时,您可以轻松地将其换成其他东西。这样,您的应用程序的其余部分不需要了解 AutoMapper 或目标模型。它所知道的只是放入源模型并期望返回 Json。

    关于design-patterns - 对象到 xml 转换的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11454260/

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