【问题标题】:Mapping Objects映射对象
【发布时间】:2011-03-25 07:48:53
【问题描述】:

通过示例将类对象映射到轻量级类对象的最佳解决方案是什么:

Customer 到 CustomerDTO 都具有相同的属性名称,我正在考虑它们之间映射的最佳优化解决方案,我知道反射会严重减慢我的速度,并且为每个映射制定方法非常耗时,所以有什么想法吗?

提前致谢。

【问题讨论】:

  • 反射可能并没有你想象的那么慢。
  • im 在图层之间映射对象以丢失对
  • 在我使用的方法中,我用某种语言(如 XSD 或 Protocolbuffer“语言”)描述了 DTO,并从中生成了代码。然后您可以为许多/任何生成代码? C#、java等语言。

标签: c# reflection mapping


【解决方案1】:

【讨论】:

  • automapper 太慢了,我试过了,测试它比做映射手册慢 20 次!
  • @宙斯。确实 - 但这对您的系统有明显的影响吗?
  • 您使用的是最新版本吗?我知道 Jimmy Bogard 最近做了一些性能改进。
  • 是的,我使用的是最新版本,是的,我不能使用慢 20 倍的东西,我想知道人们是否正在使用其他技术。
  • 我要测试 emit mapper 并给出反馈
【解决方案2】:

如果反射让你的速度太慢,试试 Fasterflect:http://www.codeproject.com/KB/library/fasterflect_.aspx

如果使用缓存机制,也不会比手写代码慢多少。

【讨论】:

  • 我会尝试一下,我会给予反馈
【解决方案3】:

我一直在玩这个,并且有以下观察结果。 Customer 应该从 CustomerDTO 继承还是读取/写入 CustomerDTO?我发现一些 DTO 生成器只为 DTO 中的数据项向量生成固定大小的固定大小数组集合,其他生成器将允许您指定 LIST 或一些此类集合。高级集合不需要出现在序列化的 DTO 中,但会影响您采用的方法。如果您的解决方案添加了高级集合,那么您可以继承,如果没有,那么您可能想要读取/写入中间 DTO。

我在 DTO 生成中使用了 Protocol Buffers 和 XSDObjectGenerator(在不同的时间!)。

【讨论】:

    【解决方案4】:

    一个新的选择是UltraMapper

    比我在 2017 年 2 月之前尝试过的任何东西都快。 (在任何情况下都比 Automapper 快 2 倍)

    它比 AutoMapper更可靠(没有 StackOverflows、没有深度限制、没有自引用限制)。

    UtraMapper 只有 1300 行代码,而不是超过 4500 多行 Automapper,它更易于理解、维护和为项目做出贡献。

    它正在积极开发,但目前它需要社区审查。 试一试,并在页面项目上留下反馈!

    【讨论】:

      猜你喜欢
      • 2019-09-19
      • 2013-08-01
      • 1970-01-01
      • 2013-10-12
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多