淺析C#分層

        最近又開始分層工作,今天和老師聊天之後,有幾個問題感覺特別的有深度,特別值得思考一下。

        首先第一個問題:爲什麼要分層

        我們在接觸機房重構的時候就開始接觸分層,但是還沒有仔細的琢磨過爲什麼要分層?分層的意義在什麼地方呢?首先在前面的一些很小的項目開發中,諸如:學生信息管理系統、VB版的機房等項目都是一個獨立開發的,一個人負責邏輯和外觀設計,但是在後面的軟件開發過程中,基本上都是以團隊的形式進行軟件的開發,小至幾人幾十人,大到幾百人甚至更多人的開發,而分層的就是爲了方便團隊的分工和辦公,每個人都各司其職,從而達到高效率的工作。

        其次,規範代碼:在開發過程中可以將每層的代碼進行規範,固定開發語言的風格;
        最後,忽略數據庫差異:好的數據訪問層可以將數據庫的差異完全屏蔽,對開發人員只是做相同的數據操作工作,甚至可以快速進行數據庫轉換(可以運用設計模式進行);

        當然了,分層實現了高內聚低耦合

        高內聚:每個模塊儘可能獨立完成自己的功能,不依賴於模塊外部的代碼。在OOP思想中,高內聚更加趨向於接口化。在調用方法的時候,只需通過相應的接口,就可以得到不同的實現,而無需修改對應類的內容及實現方式。在模塊劃分時,要遵循“一個模塊,一個功能”的原則,儘可能使模塊達到功能內聚。

        低耦合:模塊與模塊之間接口的複雜程度,模塊之間聯繫越複雜耦合度越高,牽一髮而動全身。在模塊之間的調用過程中,做到A調用B的時候可以在不導入或者不知道B存在的情況下,直接調用B來實現模塊之間的相互調用。一個完整的系統,模塊與模塊之間,儘可能的使其獨立存在。讓每一個模塊儘可能獨立完成某個特定的子功能。模塊之間的接口應該儘量少而簡單

         內聚和耦合又分多種……

        參考鏈接:https://www.cnblogs.com/Freedom0221/p/12596161.html

            爲什麼分層的時候是新建了一個項目而不是利用新建文件夾來分層?

       這其實也是一個很簡單的問題。在新建項目的時候回自動生成一個dll文件。何爲dll文件呢?DLL是Dynamic Link Library的縮寫,以爲動態鏈接庫。是一個包含多個程序,同時使用的代碼和數據的庫。通過使用DLL程序可以實現模塊化,由相對獨立的組件組成。例如,一個計帳程序可以按模塊來銷售。可以在運行時將各個模塊加載到主程序中(如果安裝了相應模塊)。因爲模塊是彼此獨立的,所以程序的加載速度更快,而且模塊只在相應的功能被請求時才加載。

        DLL文件的優勢

         1)擴展應用程序

         當程序進行更改某些操作的時候,可以很容易的將更新應用到各個模塊,而不會影響程序的其他部分,只需要更新一下DLL文件即可,而無需重新生成或安裝整個程序。比如QQ的視頻功能需要升級,那麼負責編寫QQ的程序員不必將QQ所有代碼都重寫,只需將視頻功能相關的DLL文件重寫即可。

       2)便於程序員合作

  這個和最終用戶關係不大,僅供瞭解。大家都知道編程工具有很多,比如VB、VC、Delphi等,如果好幾個人合作來編寫一個大的程序,那麼可能有的人用VB,有的人用VC,每人負責的部分所使用的編程語言都不同,究竟放在哪個編譯器中進行編譯呢?這就好比一羣來自各個國家的人在共同編寫一篇文章,如果他們所使用的語言都不同,寫出來的文章怎麼可能湊到一起呢?而有了DLL後,可以讓VC程序員寫一個DLL,然後VB程序員在程序中調用,無需爲怎麼將它們都編譯爲一個單獨的EXE而發愁了。

  3)節省內存

  如果多個應用程序調用的是同一個動態鏈接庫,那麼這個DLL文件不會被重複多次裝入內存中,而是由這些應用程序共享同一個已載入內存的DLL。就好比一個辦公室中,很少會爲每一個員工配置一臺飲水機的,而是在一個公共位置放上一個飲水機,所有需要喝水的職員都可以共用這臺飲水機,降低了成本又節約了空間。

  4)共享程序資源

  包括剛纔提到過的通用文件對話框在內,DLL文件提供了應用程序間共享資源的可能。資源可以是程序對話框、字符串、圖標,或者聲音文件等。

  5)解決應用程序本地化問題

  在下載了某個程序的漢化包後,打開漢化說明,經常可以看到用下載包中的DLL文件覆蓋掉程序原來的DLL,漢化就完成了。這些程序都是將執行代碼和應用程序界面分開編寫了,所以漢化者只需簡單地將其中和程序界面相關的DLL漢化併發布即可。

          關於DLL依賴問題:當某個程序或DLL使用其他的DLL中的DLL函數的時候,就會創建依賴項,這樣程序就不在是獨立的了,如果依賴項被損壞或者沒有引用依賴項,那程序運行的時候就會遇到問題。

         而文件夾進行分層並不能爲我們提供這麼多的文件等功能強大的東西,文件夾分層只能將源文件進行物理上的分層,當時對於新建項目類庫進行分層優勢較小,而且不是很方便。

參考鏈接:

https://baike.baidu.com/item/.dll/2133451?fr=aladdin

https://blog.csdn.net/weixin_38752101/article/details/80312303

https://blog.csdn.net/weixin_38752101/article/details/80312496

http://blog.sina.com.cn/s/blog_5365256a0100ar9j.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章