面向對象的“封裝閉合性”開發原則中,一向提倡的是把獨立的功能封裝在一個類裡面的!但從Visual Studio 2005開發,系統提供了一個分部類的開發方式一直受到争議,很多人認為把同一類的功能分布不同的檔案中,是打破了“封裝閉合原則”,一個類的功能變得難 以管理,大多數人都是在無奈的情況下才使用到分部類的方式。但在winFrom類、頁面類、DataSet裡面你經常可以發現分部類的身影,當你用到 Entity Framework的時候,你會發現每個映射生成的對象都是使用分部類的方式生成的,分部類似乎早已派上用場。分部類究竟有什麼好處,下面為大家一一揭 露。
一、分部類
根據微軟的定義,分部類就是“将類或結構、接口或方法的定義拆分到兩個或多個源檔案中。 每 個源檔案包含類型或方法定義的一部分,編譯應用程式時将把所有部分組合起來”。在使用分部類的時候,必須為類加入partial的關鍵字,注意每個類的可 通路性必須一緻,其中一類為public,其他類也必須為public。如果其中一個類為抽象類,那合并後整個類都将被視為抽象類,其中一個類為密封類, 那合并後整個類都将視為密封類。
在合并的時候,總體類全把所有的基類和特性合并繼承。要注意的是分部類必須在于同一個程式集當中,而且關鍵字不得相沖,如果一個類上為public ,另一個類為private,那将會出錯。在第二個分部類中可以調用第一個分部類中所定義的字段與方法。
二、分部方法
分部方法與分部類十分相像,方法必須包含partial關鍵字,如果一個類中并不包含該方法的實 現,而另一個類中實作了該方法,将不會影響這個方法的正常運作。這個特點跟接口有異曲同工之妙,特别是在使用代碼生成器的時候,開發人員可以使用工具生成 分部方法,然後手動去實作方法。分部方法有以下幾個限制,第一方法必須傳回void,隻能預設為private;第二,分部方法不能為virtual和 extern方法;第三,分部方法可以有ref參數,但不能有out參數;
關于分部類與分部方法,在微軟的官方網站上有着詳細介紹,在這裡不多作說明。而下面在下想介紹一下分部類與分部方法的實際用途,這才是我寫這章檔案的真的目的。
三、分部類與分部方法的可用性
LINQ 是微軟在Framewrok3.0開發推出的新産品,其中LINQ TO SQL是實作對象與資料表相映射的神奇工具。随着Framework 4.0面世,Entity Framework成為微軟項目中實作ORM的主要手段,當中*.edmx檔案中使用的都是分部類的實作方式。這是因為映射過程是自動生成的,代碼必須符 合定制的規則,當需要為對象添加一些額外的屬性,而這些屬性無需儲存到資料庫的時候,分部類就派上用場,我們可以使用分部類為對象提供各種的自定義屬性。
特别是在使用DDD領域驅動設計的時候,分部類成為實作模型動作的一個好方法。失血模型與充血模型 是DDD長久争議的話題,在失血模型中,模型是不應該具備動作,而是把動作放在Service層中,而在充血模型中,模型類應該具有各自的方法,而“分部 類”就是實作充血模型方法的一種好手段。
在下也是在使用分部類對Entity Framework模型進行開發的時候才注意到分部類, 文章的目的主要是想介紹分部類在Entity Framework開發過程中的作用,敬請點評。
對JAVA與.NET開發有興趣的朋友歡迎加入QQ群:162338858
<a href="http://qun.qq.com/#jointhegroup/gid/162338858" target="_blank"></a>
本文轉自 leslies2 51CTO部落格,原文連結:http://blog.51cto.com/79100812/663273