首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模型转换覆盖率

模型转换覆盖率
EN

Stack Overflow用户
提问于 2012-11-23 15:46:14
回答 2查看 67关注 0票数 0

我们最近引入了一种全新的数据模型,从逻辑结构的角度来看,该模型与我们当前的模型不同。我们还将模型的语言从德语更改为英语,因为我们希望以XML形式向客户开放模型结构。

为了能够转换模型,我们实现了一个显式转换,基本上将新模型的不同类的所有属性匹配到我们的旧模型中。

如下所示:

代码语言:javascript
复制
private OldModel Convert(NewModel src)
{
  var dst = new OldModel();
  dst.Prop1 = src.SomeOtherProp
  dst.Prop2 = Convert(src.ComplexProp);
  //....
  return dst;
}

现在我们要确保,新模型的所有属性都写入了旧模型中,用于覆盖和测试目的。我们还希望确保我们没有忘记任何属性,并保证对于未来的模型扩展,我们不会忘记一个属性。

我的想法是解析codefile,提取从新模型读取的所有属性,通过反射在新模型上运行,将它们与其中的实际属性进行比较。

这个解决方案感觉不太好:-)有什么建议吗?

感谢大家的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-27 15:35:11

我们最终决定使用如下的正则表达式来解析codefile:

代码语言:javascript
复制
@"private static [a-zA-Z0-9.]+[ ]+Convert[(][^)]*[)]\s*[{](?<body>[^{}]*(((?<Open>[{])[^{}]*)+((?<Close-Open>[}])[^{}]*)+)*(?(Open)(?!)))[}]";

它将匹配像这个private static Namespace.ClassName Convert(Namespace.ClassName input)这样的方法,并提取方法体。由于转换器方法遵循简单的结构模式,因此很容易提取我需要的信息。

票数 0
EN

Stack Overflow用户

发布于 2012-11-27 07:59:13

我建议使用像AutoMapper这样的映射库。它们允许配置映射、转换器,并使用公共属性和特定methods进行操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13524903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档