iT邦幫忙

5

【C#】小知識 #8 : 使用partial class + private內部類別,避免日後專案開發受限程度

c#

在開發、維護專案,常會有許多半成品功能,你不會想讓別人來使用,因為之後破壞性更新可能性非常高。

這時候可以使用partial class + private內部類別來避免此情況。

首先介紹private內部類別

請看以下例子,可以發現 緩存類別,Model類別 ,其他使用者是無法直接使用,只能單純使用主要功能類別的API接口,這樣日後想要在內部類別修改,刪除屬性,不用怕影響到其它程式,導致改A壞B情況。

    public static class 主要功能類別
    {
        public static string API接口()
        {
            return new 緩存類別().API接口();
        }
		pirvate class 緩存類別{
          public string API接口()
          {
          	  var model = new Model類別();
              return SomeFunction(model);
          }     
          private void SomeFunction(Model類別 model){
          	//Your Logic
          }
		}   
		pirvate class Model類別{
			public string MyProperty { get; set; }   
		}        
    }

partial class引進,解決cs檔案肥大、可讀性差問題

有經驗的讀者一定有這樣經驗,前面例子會有一個嚴重缺點:隨著專案的增長,主要功能類別會變成一個龐大的怪物,要避免此問題可以使用partial class

舉例:
我們可以把上面三個類別拆成三個cs檔案,分別如以下代碼。

    public static partial class 主要功能類別
    {
        public static string API接口()
        {
            return 緩存類別.API接口();
        }
    }
    public static partial class 主要功能類別
    {
		pirvate class 緩存類別{
          public static string API接口()
          {
              return SomeFunction();
          }        
		}
    }
    public static partial class 主要功能類別
    {
		pirvate class Model類別{
			public string MyProperty { get; set; }   
		}
    }

系統在編譯後會幫助將三個partial類別內容組合成一個,如下面兩張圖片
20190126154833-image.png
20190126155210-image.png

結語

個人認為這是很重要的小技巧,因為看過滿多人為了方便動不動就宣告為public,其實此舉會為之後埋下坑...

要記得專案修改受限程度與開放程度成正比,如同圖片:
20190126153406-image.png

像是我們常用的LINQ專案中,也是使用此方法做為開發的方式,如同圖片
20190126155908-image.png

日後隨著類別功能完善,可以視情況慢慢地增加可見度,甚至移出partital類別,這樣開發方式緊密、又讓人安心。


尚未有邦友留言

立即登入留言