Automapper vs运行时通过配置文件和反射进行映射

时间:2011-11-20 16:31:41

标签: reflection orm mapping linq-to-xml automapper

我是这个主题的新手,我想知道你的意见我应该做什么或如何解决以下问题:

我正在开发一个C#Web服务客户端,它从Web服务后面的数据库中检索数据。 Web服务响应将数据作为XML保存在CDATA元素中。 xsd架构可用。在XML中是表示一个数据集/行的元素。我只需要使用一个数据集的几个字段。检索数据后,我必须检查一些业务规则/条件,并将这些字段写入另一个系统。从其他系统读取一些值,检查一些业务规则并将它们发送回根据模式封装在适当XML格式中的Web服务。

到目前为止我做了什么。我使用XSD.exe根据底层架构生成c#类。我想我有以下选项让我的方案工作:

  1. ORM框架: 这应该是我的应用程序的矫枉过正。或者它不是解决方案,因为我不直接与数据库通信。

  2. Automapper: 似乎是一个很好的解决方案。但我认为这不像我的3.选项那样灵活(见其他)。如果在部署应用程序后检测到映射中的错误,我必须重建应用程序。另一个负面因素是,如果架构发生变化,我将不得不重新构建我的应用程序。 (或者我是否总是根据架构调整我的应用程序?)

  3. 通过自定义映射文件和反射: 我不确定这是否真的可以实现,但在我看来这将是最灵活的解决方案。解决方案与此http://www.techrepublic.com/article/applied-reflection-dynamically-accessing-properties-of-a-class-at-runtime/6099345类似 如果我理解这篇文章是正确的,那么会有一个配置文件将类的类型及其属性映射到目标类型,例如: SourceClassType = ClassA,SourcePropertyName = PropA-> DestinationClassType = ClassB,DestinationPropertyName = PropX。

  4. Linq2Xml: 使用Linq2Xml,我可以从XML中提取所需的数据并将其放在我自己定义的类中。但是,如何根据Web服务期望的架构将数据放回XML中?

  5. 我的分析是否正确?我误解了什么吗?你会推荐什么?我有其他选择吗?

1 个答案:

答案 0 :(得分:0)

  

如果在我的应用程序部署后检测到映射中的错误,我   必须重建应用程序。另一个负面因素是,如果是   架构更改,我将不得不重新建立我的应用程序。 (或者我有   总是根据架构调整我的应用程序?)

有许多方法可以避免由于所需的代码更改而无法重建应用程序。一种方法是动态编译和使用组件。例如,这可以是源代码文件。这一决定涉及许多因素,例如需要多久更改一次,谁将进行更改,性能有多重要等等。

另一种选择可能是使用xslt将xml输入转换为xml输出,但这可能取决于业务规则中的具体要求。

我要做的是使用xml(de)序列化和Automapper。将xml反序列化为对象,使用automapper和自定义业务逻辑将源转换为目标对象,然后将目标对象序列化为xml作为输出。