中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

代碼重構(gou)~提取到類

返回目錄

提(ti)取到類(lei)(lei)(Extract Class) : 將(jiang)多個(ge)類(lei)(lei)所公用(yong)(yong)的部分(包括方法,屬性(xing),事件(jian)等(deng)等(deng))抽象(xiang)出來,形(xing)成一個(ge)新的類(lei)(lei)型,這個(ge)類(lei)(lei)被(bei)稱為它(ta)們的基(ji)(ji)類(lei)(lei)(base class)或者(zhe)(zhe)父類(lei)(lei),而使(shi)用(yong)(yong)面向對象(xiang)語言的特性(xing),在基(ji)(ji)類(lei)(lei)中使(shi)用(yong)(yong)抽象(xiang)對象(xiang)或者(zhe)(zhe)虛對象(xiang),讓子類(lei)(lei)可(ke)(ke)以直接使(shi)用(yong)(yong)基(ji)(ji)類(lei)(lei)的成員或者(zhe)(zhe)根據(ju)自(zi)己的邏(luo)輯去覆寫基(ji)(ji)類(lei)(lei)的成員,提(ti)交到類(lei)(lei)經常被(bei)用(yong)(yong)到產品(pin)族的概念中,如(ru)一個(ge)數(shu)據(ju)操作基(ji)(ji)類(lei)(lei),它(ta)的子類(lei)(lei)可(ke)(ke)能是user操作類(lei)(lei),product操作類(lei)(lei),order操作類(lei)(lei)等(deng),具體(ti)看一下代碼(ma):

userRespository類型是用來對user表進行直(zhi)接(jie)的(de)(de)單純的(de)(de)數據操作(zuo)的(de)(de),它可(ke)以是這樣的(de)(de)

而對(dui)(dui)于userRespository來(lai)(lai)說,它可能需要(yao)(yao)一(yi)個DB數據(ju)源(yuan)對(dui)(dui)象(可能是linq to sql,ef的(de)(de)一(yi)種),還(huan)有一(yi)些標準(zhun)的(de)(de)CURD操作的(de)(de)方法,而這(zhe)些對(dui)(dui)于productRespository類(lei)型也是一(yi)樣需要(yao)(yao)的(de)(de),這(zhe)時,我們就應該將userRepository和productRepository公用的(de)(de)部分提取(qu)出來(lai)(lai),行(xing)成它們的(de)(de)基類(lei),即(ji)RepositoryBase

在這個RepositoryBase基(ji)(ji)(ji)類(lei)(lei)中(zhong),還使(shi)用了(le)(le)接口,它實現了(le)(le)對所有數(shu)據基(ji)(ji)(ji)類(lei)(lei)(可(ke)能是linq to sql基(ji)(ji)(ji)類(lei)(lei),ef基(ji)(ji)(ji)類(lei)(lei),內(nei)存(cun)數(shu)據源(yuan)基(ji)(ji)(ji)類(lei)(lei),緩(huan)存(cun)數(shu)據源(yuan)基(ji)(ji)(ji)類(lei)(lei)等)操作的(de)統一性(xing)和一致性(xing)。

我們在進行(xing)“提取(qu)到(dao)類”時,需要注意的(de)幾個概(gai)念(nian)是:

抽(chou)象方(fang)(fang)法:abstract method,在基類(lei)去(qu)定義方(fang)(fang)法規范,由子類(lei)去(qu)實(shi)現它的邏輯

虛(xu)方法(fa):virtual method,在(zai)基類(lei)(lei)去實現了(le)這個方法(fa),但子(zi)類(lei)(lei)可(ke)以(yi)根(gen)據自己的邏輯去override它

抽象類:一(yi)般(ban)基類都是不能被(bei)直接實例化的,所以(yi)一(yi)般(ban)是抽象類

如果上(shang)面的(de)(de)代碼不容(rong)易理解,可(ke)(ke)以看一(yi)面簡(jian)單的(de)(de)demo,一(yi)個(ge)boy類,它有(you)(you)一(yi)個(ge)屬生name和(he)(he)一(yi)個(ge)方法display(),name表示為男孩的(de)(de)姓(xing)名(ming),display輸出男孩的(de)(de)姓(xing)名(ming);而(er)另外一(yi)個(ge)類girl,它也一(yi)樣(yang)有(you)(you)name和(he)(he)display,這時,我們可(ke)(ke)以將boy和(he)(he)girl公有(you)(you)的(de)(de)屬性和(he)(he)方法進行抽取,放在person類,而(er)它應(ying)該有(you)(you)兩個(ge)屬性name和(he)(he)gander,代表人的(de)(de)姓(xing)名(ming)和(he)(he)性別,有(you)(you)一(yi)個(ge)方法是(shi)display(),用來輸出人的(de)(de)姓(xing)名(ming)和(he)(he)性別,這個(ge)簡(jian)單的(de)(de)例子很好的(de)(de)說明了提取到類的(de)(de)使用場合,它的(de)(de)代碼如下(xia):

 1 //男孩(hai)子(zi)
 2 class Boy
 3 {
 4   public string Name{get;set;}
 5 
 6   public void Display()
 7  {
 8   Console.Write("男(nan)孩姓名是{0}",Name);
 9   }
10 }
11 //女孩子
12 class Girl
13 {
14   public string Name{get;set;}
15 
16   public void Display()
17  {
18   Console.Write("女孩姓名是(shi){0}",Name);
19   }
20 }
21 //而把(ba)方法修改后變為
22 
23 class Person
24 {
25   public string Name{get;set;}
26   public string Gander{get;set;}
27   public virtual void Display()
28   {
29      Console.Write("{0}姓名是{1}",Gander,Name);
30    }
31 }
32 
33 //男孩根據(ju)自己的需要,去override  Display()這個方法
34 class Boy
35 {
36   public string Name{get;set;}
37 
38   public void Display()
39  {
40   Console.Write("性別:{0},姓名(ming):{1}",Gander,Name);
41   }
42 }

其實,代碼(ma)重(zhong)構它不僅是(shi)對代碼(ma)本身的(de)重(zhong)構(代碼(ma)執行性(xing)能),更重(zhong)要(yao)的(de)是(shi)對面向對象的(de)重(zhong)構(代碼(ma)的(de)邏輯表現(xian))。

返回目錄

posted @ 2012-07-27 17:18  張占嶺  閱讀(2392)  評論(3)    收藏  舉報