MyFramework框架搭建(二)DAL层整体通信

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

   书接上回—整体实现思路

    一、编码规范

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

   二、通信方式

      WCF

      选择WCF主要是因为它集成了目前.net通信的所有优点方便以后扩展,以后想通过它试试TCP通信,服务器端操控客户端的一些功能                                          

      方式:采用服务代理类(可以灵活的配置服务器端地址)

      方法

      1、找到如下地址“C:WindowsSystem32cmd.exe”右键以管理员身份运行;

      2、输入命令:"C:Program FilesMicrosoft SDKsWindowsv7.0AinSvcUtil.exe" /out:C:WCFClinet                                 ChanelFactory.cs /config:C:WCFClintapp.config http://localhost:81/WCFServiceTest/CNPatentSearchService.svc

      注意事项

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

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

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

   三、数据传输

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

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

        方法

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

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

        2、定义压缩和解压缩类

           Compressor.cs

        3、定义传输上帝类

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

        4、定义服务处理类

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

       注意事项

       1、压缩方法

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

          后来采用GZipStream,你可以问我感觉怎么样,非常舒服啊^_^

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

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

   一、CommonFiles(该类库还可以存放js、css文件等,方便文件管理)

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

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

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

    二、DAL(本文章重点)

        1、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类型数据,客户端自己转换。

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

           1)XMLHelp.cs

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

                采用Linq to Xml技术,比XmlDocument方便很多,建议大家试试

     三、GlobalControler(全局控制类库)

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

     四、Model(模型类库)

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

             ExecuteType.cs 执行方法枚举类

          2)ModelFolder(实体类)

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

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

             3)ReturnTransformPackage.cs(返回值包)

      五、WcfService(定义WCF服务)

          传入传出就一个方法

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

   遗留问题:

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

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

  3、B/S结构的VIEW层没有找到好的框架,哪位仁兄可以指点一、二

  有缘看到这篇文章的博友,如果发现我哪里有问题或者对哪里感兴趣,希望各种能指出,小弟万分感激。

  如果感兴趣的博友可与我联系QQ449208380

 

          

              

              

      

  

原文地址:https://www.cnblogs.com/kaixinxingfu/p/3440335.html