0

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

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

像这样:

private OldModel Convert(NewModel src)
{
  var dst = new OldModel();
  dst.Prop1 = src.SomeOtherProp
  dst.Prop2 = Convert(src.ComplexProp);
  //....
  return dst;
}

现在我们要确保,新模型的所有属性都写入旧模型以进行覆盖和测试。我们还想确保我们没有忘记任何属性,并保证对于未来的模型扩展,我们不会忘记某个属性。

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

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

我很感激任何帮助!

4

2 回答 2

0

我们最终决定使用如下正则表达式解析代码文件:

@"private static [a-zA-Z0-9.]+[ ]+Convert[(][^)]*[)]\s*[{](?<body>[^{}]*(((?<Open>[{])[^{}]*)+((?<Close-Open>[}])[^{}]*)+)*(?(Open)(?!)))[}]";

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

于 2012-11-27T07:35:11.107 回答
0

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

于 2012-11-26T23:59:12.640 回答