架構(gou),改善程序復(fu)用性的(de)(de)設(she)計~第三講 實現一種功能(neng)的(de)(de)代碼只能(neng)出現在一處
從標題中可以看到本篇文(wen)章(zhang)將介紹代(dai)碼隨意性的(de)缺點及由此引發的(de)后果(guo),首(shou)先,來說一下同(tong)一功能的(de)代(dai)碼在(zai)多個程(cheng)序中被編寫多次的(de)后果(guo):
1 它(ta)破壞了面向對象的(de)“單一職責”的(de)原則
2 當代(dai)碼邏輯復雜時,或者(zhe)進行二(er)次開(kai)發(fa)時,程序(xu)員將對(dui)方法(fa)調用產生(sheng)歧義(yi),即不知道應該(gai)使用哪(na)個(ge)方法(fa),即代(dai)碼可讀性差
3 當這個不規范的(de)(de)方法邏(luo)輯需要修改時,你將會(hui)進行多(duo)次重復(fu)的(de)(de)調整,這是一(yi)個程序不希望做的(de)(de)事
解決方法:
當(dang)幾(ji)個(ge)模塊需要用到(dao)同(tong)一功能,或者(zhe)功能相似的(de)方(fang)法(fa)時,應該先(xian)將公用的(de)功能抽象成(cheng)(cheng)一個(ge)新的(de)方(fang)法(fa),再把不同(tong)的(de)地方(fang)抽象成(cheng)(cheng)其它方(fang)法(fa),這也就是《重構》中的(de)extract method 。
下面看一下代碼:
不規范的:
View Code
1 public bool RegisterUser(Userbase entity) 2 { 3 bool flag = false; 4 try 5 { 6 //注冊用戶邏(luo)輯 7 8 //添(tian)加(jia)日志(zhi)邏(luo)輯 9 } 10 catch (Exception) 11 { 12 13 throw; 14 } 15 return flag; 16 }
規范(fan)的,再(zai)利用率高的,面(mian)向對象的:
View Code
/// <summary> 20 /// 注(zhu)冊用戶 21 /// </summary> 22 /// <param name="entity"></param> 23 /// <returns></returns> 24 public bool RegisterUser(Userbase entity) 25 { 26 bool flag = false; 27 try 28 { 29 //注(zhu)冊用戶邏輯 30 } 31 catch (Exception) 32 { 33 34 throw; 35 } 36 return flag; 37 } 38 /// <summary> 39 /// 添加日志 40 /// </summary> 41 /// <param name="entity"></param> 42 /// <returns></returns> 43 public bool AddLog(Log entity) 44 { 45 bool flag = false; 46 try 47 { 48 //添加日志(zhi)邏輯 49 } 50 catch (Exception) 51 { 52 53 throw; 54 } 55 return flag; 56 }
通過代(dai)碼(ma)我們可(ke)以看(kan)到,不規(gui)范(fan)的代(dai)碼(ma)將多(duo)種功能方法合成(cheng)了一種,屬于(yu)邏輯(ji)混亂了,而規(gui)范(fan)的代(dai)碼(ma)邏輯(ji)清晰(xi),職責(ze)分明,代(dai)碼(ma)重復利用率較高。
