• Transformer 工具的由来及实现


    目前,有不少企业已经开始采用WCF来开发分布式系统,企业需求的这种分布式系统要求有着良好的可维护性以及可靠性。为了实现这一目标,开发团队必然选择架构良好的n层架构。参见下图:


       ASP.NET页面层是WCF服务的一个消费者,大家都知道,WCF服务向消费者暴露终结点(Endpoint)以及数据契约(DataContract)。数据契约与业务实体一般有着相同的属性,但是数据契约做为与外界交互的消息(Message),它一般还有着消息头(MessageHeader),用于辅助与外界系统的通信。在实际的开发中,我们会在WCF服务层使用数据契约,而在业务处理层使用业务实体,而在WCF服务层内部引入转换层(Transform),它的职责就是将WCF服务层与业务处理层之间交互的数据契约与业务实体来回转换。而在企业的业务很复杂,数据契约、业务实体一般都是有很多属性的类型,那么如果我们手动写这样的MessageToEntityEntityToMessage方法,那么一定会感觉到相当的枯燥乏味。这就是我做的Transformer工具的由来。

       Transformer工具的开发主要使用了.NET平台中上反射(Refection)以及代码生成类库(CodeDom)Transformer主窗体的实现方法:

    (1)    打开数据契约所在DLL,并反射该DLL中的所有类型,并根据类型的命名空间(Namespace)分组。然后将分组后的数据显示在一个TreeView中。

    (2)    打开业务实体据有的DLL,做法同(1)

    (3)    在两边的TreeView中分别选中一个类型,然后点击下面的”Generate” 按钮即可生成两边相互转换的代码。

    Transform主窗体截图如下:


    点击”Generate”按钮会生成Transformer代码:


     

    那么代码是如何自动生成的呢?我们先看一下生成的代码示例:


    示例代码可以看作生成代码的模板,我的实现思路如下:

    首先要从转换的其中一个类中反射出其所有的属性,然后遍历其属性列表,在遍历过程中,查找另一个类中是否有同名且类型相同的属性,如果有就可以生成”msg.XXX=entity.YYY;”这样的赋值语句。当然,使用CodeDom我们可以生成这些代码。下面结合本工具使用到的情况介绍一下CodeDom:

    CodeMemberMethod

            CodeMemberMethod有如下

            CodeMemberMethod的属性有:

                   Attributes(MemberAttributes枚举):

    ReturnType(CodeTypeReference):标识返回值的类型

                   Name(string):标识方法的名字

                   Parameters(CodeParameterDeclarationExpressionCollection):

                   方法参数的集合

                   Statements(CodeStatementCollection):

                   方法体内语句的集合

            假如要产生下面的代码:

           

            那么使用CodeDom生成上面代码要使用的代码如下:


    如果你对CodeDom有兴趣,可以学习MicrosoftMSDN文档:

    http://msdn.microsoft.com/en-us/library/f1dfsbhc.aspx

     

         下面是Transformer工具的可执行程序及源代码的URI,有兴趣的不妨看一下:

         https://files.cnblogs.com/fuhongwei041/TransformerSourceCodeAndExe.rar

        

         That's all. Thank you for your reading!
     

  • 相关阅读:
    Kinect 开发 —— 硬件设备解剖
    Kinect 开发 —— 引言
    (转)OpenCV 基本知识框架
    OpenCV —— 摄像机模型与标定
    OpenCV —— 跟踪与运动
    OpenCV —— 图像局部与分割(二)
    OpenCV —— 图像局部与部分分割(一)
    OpenCV —— 轮廓
    OpenCV —— 直方图与匹配
    OpenCV —— 图像变换
  • 原文地址:https://www.cnblogs.com/fuhongwei041/p/1252765.html
Copyright © 2020-2023  润新知