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

相關文章
相關標籤/搜索