MyFramework框架搭建(二)DAL层总体通讯

    首先在这里我要感谢张哥(亲,若是你能看到),没有他和他的框架就没有我今天的思路。css

   书接上回—总体实现思路服务器

    1、编码规范网络

          PascalCamel(具体如何实现,兄弟我就不详细介绍了)app

   2、通讯方式框架

      WCF性能

      选择WCF主要是由于它集成了目前.net通讯的全部优势方便之后扩展,之后想经过它试试TCP通讯,服务器端操控客户端的一些功能                                          
测试

      方式:采用服务代理类(能够灵活的配置服务器端地址)优化

      方法编码

      一、找到以下地址“C:\Windows\System32\cmd.exe”右键以管理员身份运行;spa

      二、输入命令:"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\SvcUtil.exe" /out:C:\WCFClinet                                 \ChanelFactory.cs /config:C:\WCFClint\app.config http://localhost:81/WCFServiceTest/CNPatentSearchService.svc

      注意事项

      一、把代理类拷贝到相应的类库里

      二、把app.config里的内容拷贝到启动项的config里

      三、设置最大传输数据参数 maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"

   3、数据传输

       以二进制数据形式传入,传出    

       方式序列化-压缩-解压缩-反序列化

        方法

        一、定义序列化和反序列化类

           Serializer.cs(每个类必须单独测试,我采用在测试启动项里,分别为每一个类建立一个测试方法形式)

        二、定义压缩和解压缩类

           Compressor.cs

        三、定义传输上帝类

           TransGod.cs(主要负责DLL层传入的实体类序列化,结果反序列化,做为前台通讯的中间处理)

        四、定义服务处理类

           ServiceDeal.cs(判断传过来的是哪一种执行方法,分别执行,传回结果和异常信息)

       注意事项

       一、压缩方法

          C#目前我知道有两种压缩方法,最初我用deflateStream,但当字节数小于256时返回值为0,而且解压不方便

          后来采用GZipStream,你能够问我感受怎么样,很是舒服啊^_^

    详细设计步骤(目前7层,比上回多出GlobalControler,WcfService)

   本次只描述(多出/修改)的类或文件

   1、CommonFiles(该类库还能够存放js、css文件等,方便文件管理)

        一、XmlFolder(用于存放整个解决方案的Xml文档)

            1)GlobalXML.xml(用于存储全局XML配置文件)

               把该文件标记为嵌入式文件经过反射获得,对于xml文件我我的认为指明路径取不科学(我测试过)

    2、DAL(本文章重点)

        一、DataTransFolder(全部的数据传输操做都在这个文件夹里完成)

           1)Compressor.cs(压缩类)

              采用GZipStream,在解压的时候有一个优势能够CopyTo(stream),比deflateStream方便不少

                 2)NetCommunicationServiceClient.cs(WCF代理类)

              目前尚未优化它的传入地址功能(写文章前忘了Sorry)

           3) Serializer.cs(序列化类)

               能够把压缩和解压缩分别集中到序列化和反序列化里

            4)ServiceDeal.cs(服务处理类)

               把数据源预加载到内存(这块须要注意的是,我想作一个通用的数据总线,不管Oracle,SQL都支持,判断

               传过来的参数的dataSource选择具体数据源,因为通常项目默认就一个我在实体类dataSource里加了一个判断,若是

               为空,给定默认数据源。

            5)TransGod.cs(传输上帝类)

               客户端在调用时只需调用一个GetResult方法,传入实体类用起来很是舒服,返回一个Dynamic类型数据,客户端本身转换。

       二、DealXMLFolder(处理XML的文件夹)

           1)XMLHelp.cs

              传入类库DLL,文件位置,实体类,经过反射获得传入实体类的集合

                采用Linq to Xml技术,比XmlDocument方便不少,建议你们试试

     3、GlobalControler(全局控制类库)

         目前尚未实现类,准备把自定义控件、全局的事件工厂放在这个类库里

     4、Model(模型类库)

         1)EnumFolder(存放枚举类的文件夹)

             ExecuteType.cs 执行方法枚举类

          2)ModelFolder(实体类)

             1)InvokeTransformPackage.cs(数据网络传输包类)

             2)PingTransformPackage.cs(网络通讯包)

             3)ReturnTransformPackage.cs(返回值包)

      5、WcfService(定义WCF服务)

          传入传出就一个方法

          public byte[] WebInvoke(byte[] data)
          {
            return ServiceDeal.Instance.Invoke(data);
          }

   遗留问题:

  一、反射影响性能,不知各位是否有成熟的解决方案

  二、XML嵌入到类库里,除了指定路径,和反射是否有其余好的办法

  三、B/S结构的VIEW层没有找到好的框架,哪位仁兄能够指点1、二

  有缘看到这篇文章的博友,若是发现我哪里有问题或者对哪里感兴趣,但愿各类能指出,小弟万分感激。

  若是感兴趣的博友可与我联系QQ449208380

相关文章
相关标签/搜索