日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
用好C#中的#region指令實(shí)現(xiàn)良好的代碼組織

這篇文章我將不會去介紹如何使用#region指令。因?yàn)槊總€(gè)C#開發(fā)人員都應(yīng)該見過和使用過#region指令的。這篇文章將討論如何在代碼中正確的使用它。使用#region就是將一些有關(guān)聯(lián)的代碼組織在一起,然后折疊起來。這樣你就在一個(gè)函數(shù)中看不到很長很長的代碼段。例如:

成都創(chuàng)新互聯(lián)公司自2013年起,先為華容等服務(wù)建站,華容等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為華容企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

 
 
 
  1. public void DoSomething()  
  2. {    
  3. bool shouldIDoSomething;     
  4. #region Decide if I should do something   
  5. if(needToDoSomething && haventDoneSomethingThisDay)  
  6. shouldIDoSomething = true;   
  7.  else    
  8. {  
  9. // do some other logic to decide and 
  10. set shouldIDoSomething to some value  
  11.   }    
  12. #endregion     
  13. if(shouldIDoSomething)    
  14. {done++;  }} 

當(dāng)然這段代碼很簡單。在實(shí)際項(xiàng)目中,你可能看到上百行甚至更多的代碼在一個(gè)#region中。如果把它折疊起來??雌饋砭蜁苷麧?。是吧?

 
 
 
  1. public void DoSomething()  
  2. {    
  3. bool shouldIDoSomething;     
  4. [Decide if I should do something]     
  5. if(shouldIDoSomething)    
  6. {done++;    
  7. }} 

我們只是把一些代碼和一些變量組合起來放在#region中。如果你在仔細(xì)想想,其實(shí)我們相當(dāng)與創(chuàng)建了一個(gè)新的函數(shù),只是將這些方法內(nèi)置到當(dāng)前方法中。一個(gè)函數(shù)只做單一的一件事情,這是Clean Code這本書的一個(gè)原則。為什么我們不把它提取為一個(gè)方法呢,這樣一來,一個(gè)函數(shù)就只做一件事情了。

 
 
 
  1. public void DoSomething(){    
  2. if(ShouldIDoSomething())   
  3.  {done++;  }}   
  4. private bool ShouldIDoSomething(){    
  5. if(needToDoSomething && haventDoneSomethingThisDay)  
  6. shouldIDoSomething = true;    
  7. else   
  8.  {  
  9. // do some other logic to decide   
  10. and set shouldIDoSomething to some value  }} 

這樣看起來就清楚很多,因?yàn)槲覀兘档土酥暗腄oSomething函數(shù)的復(fù)雜度。兩個(gè)函數(shù)可以分開測試,確保沒有邏輯錯誤。
小段總結(jié)1:  #region 不適合在大方法中使用,當(dāng)你在一個(gè)方法中使用#region 的時(shí)候,停下來想想你剛剛寫了什么代碼?大多數(shù)時(shí)候,你可以將這些代碼段獨(dú)立成一個(gè)函數(shù)。

看看下面這段非常漂亮的代碼:

 
 
 
  1. #region Get Customer   
  2. public void GetCustomer(){    
  3. // code to get the customer}   
  4. #endregion   
  5. #region Save Customer   
  6. public void SaveCustomer(){    
  7. // code to save the customer}   
  8. #endregion 

將它折疊之后,變成下面這樣:

 
 
 
  1. [Get Customer] [Save Customer] 

這樣做很容易閱讀嗎?這樣做的目的是什么,我不明白?代碼折疊就會變得更好?我覺得這樣做只會讓代碼更難以閱讀,因?yàn)槟忝看我磖egion中的代碼,你都要展開一次。

小段總結(jié)2:不要因?yàn)槟隳?,你就使?region 。

再看下面這個(gè)例子

 
 
 
  1. public class PriceCalculator{    
  2. public decimal CalculatePrice()    
  3. {decimal price = 100m;decimal discount = CalculateDiscount();  
  4. return price * (1m - discount));   
  5.  }     
  6. #region Discount Calculation     
  7. private void CalculateDiscount()    
  8. {decimal discount = 0m;   
  9. if(CanApplyDiscount())    
  10. discount = 0.05m;   
  11. return discount;   
  12.  }     
  13. private void CanApplyDiscount()  {  
  14. // some logic, other method calls  }     
  15. // some other discount calculation methods  ...     
  16. #endregion} 

如果你將這個(gè)例子和本文中的***個(gè)例子做下比較,你可能會看到它們的共同點(diǎn)。他們是相同的,不過一個(gè)是在類中,一個(gè)是在函數(shù)中,層級不同而已。這里在提一個(gè)原則:單一職責(zé)原則,一個(gè)類應(yīng)該只有一個(gè)職責(zé)??瓷厦娴念悾憧梢院苋菀卓闯鏊袃蓚€(gè)職責(zé):價(jià)格計(jì)算和折扣計(jì)算。折扣計(jì)算的方法被放到一個(gè)#region中。同樣,可以將它們提取出來做為一個(gè)新類。

小段總結(jié)3:可以將一組相關(guān)的函數(shù)提取到一個(gè)職責(zé)單一的新類中。

 那我們到底怎么使用 #region 呢。將東西用它來分組,它是非常有用的。在我寫的類中或多或少有幾個(gè)regions,用來對類中不同的結(jié)構(gòu)進(jìn)行分組。比如: fields, properties, methods, events, types等。如果你打開我寫的類文件,你會看到結(jié)構(gòu)如下:

 
 
 
  1. public class SomeClass{  
  2. [Events]  
  3. [Fields]  
  4. [Properties]   
  5. [Methods]} 

總的來說:我將region看成能控制閱讀源代碼的復(fù)雜度的一種方式。因?yàn)槟憧梢詫⒁恍┫嚓P(guān)的代碼放在一個(gè)區(qū)域(region)里面。但是,這不是隨便就創(chuàng)建的新的方法或者新類的借口。其實(shí)Region并不能消除復(fù)雜度,它只是在你閱讀代碼的時(shí)候,隱藏了部分代碼。你必須通過寫出小巧,清晰,重點(diǎn)突出的方法和類,才能控制代碼的復(fù)雜度。當(dāng)你做到這些的時(shí)候,你甚至?xí)l(fā)現(xiàn)region是不必要的。


網(wǎng)站欄目:用好C#中的#region指令實(shí)現(xiàn)良好的代碼組織
轉(zhuǎn)載來于:http://www.5511xx.com/article/copssgc.html