自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

編寫干凈的C#代碼技巧

開發(fā) 后端
在當(dāng)今時(shí)代,編寫代碼并不困難。然而,編寫干凈且可伸縮的代碼并不容易。在本文中,我們將討論一些為我們的項(xiàng)目編寫干凈C#代碼的技巧。乍一看,任何以前從未見過您的代碼的開發(fā)人員都必須盡可能地理解它,它幫助我們更好地理解代碼。

介紹

在當(dāng)今時(shí)代,編寫代碼并不困難。然而,編寫干凈且可伸縮的代碼并不容易。在本文中,我們將討論一些為我們的項(xiàng)目編寫干凈C#代碼的技巧。乍一看,任何以前從未見過您的代碼的開發(fā)人員都必須盡可能地理解它,它幫助我們更好地理解代碼。

下面是編寫干凈C#代碼的一些重要技巧。

使用好的IDE

首先,為您的技術(shù)堆棧選擇最好的IDE。在我們的例子中,Visual Studio是C#最流行、最好的IDE之一。它是微軟可靠的、完全的產(chǎn)品。一些開發(fā)人員也喜歡Rider IDE(付費(fèi))。使用這些IDE可以確保代碼保持整潔。Visual Studio有相當(dāng)穩(wěn)定的智能感知特性,可以糾正和建議代碼中的更改。

使用有意義的名字

命名變量可能是整個(gè)軟件開發(fā)生命周期中最困難的部分。為變量和方法想一個(gè)有意義的名稱是非常耗時(shí)的。但是跳過這個(gè)過程并隨機(jī)命名也不是一個(gè)好主意,不是嗎?

不建議寫法

  1. int d; 

這是命名變量最簡(jiǎn)單的方法,對(duì)吧?但是不要這樣做。一個(gè)好的名稱可以幫助其他開發(fā)人員理解變量/方法的上下文和用法。下面是您想要命名變量的方式。

建議寫法

  1. int daysToAppocalypse; 

使用駱駝/帕斯卡大小寫符號(hào)

除了為變量選擇一個(gè)合適的名稱外,還要維護(hù)您編寫名稱的方式。理想情況下,我們使用駱駝大小寫和Pascal大小寫表示法作為最佳代碼實(shí)踐。不要在變量中使用隨機(jī)大寫字母。那看起來就是不漂亮!

駝峰式大小寫符號(hào)

基本上,變量的第一個(gè)單詞的第一個(gè)字母將是小寫的,后面每一個(gè)單詞的第一個(gè)字母應(yīng)該是大寫的。在命名局部變量和方法參數(shù)時(shí),必須使用這種符號(hào)。

不建議寫法

  1. int RandomInteger;   
  2. string FirstName; 

建議寫法

  1. int randomInteger;   
  2. string firstName;  

帕斯卡案例符號(hào)

這里,您所有單詞的首字母應(yīng)該是大寫,我們使用這種符號(hào)來命名方法和類。

不建議寫法

  1. class program   
  2. {   
  3.     static void main(string[] args)   
  4.     {   
  5.         Console.WriteLine("Hello World!");   
  6.     }   
  7. }  

建議寫法

  1. class Program   
  2. {   
  3.     static void Main(string[] args)   
  4.     {   
  5.         Console.WriteLine("Hello World!");   
  6.     }   
  7. }   

注意格式

對(duì)代碼進(jìn)行格式化可以提高代碼的可讀性。制表符優(yōu)于空格,記得嗎?

  1. class Program   
  2. {static void Main(string[] args)   
  3.     {Console.WriteLine("Hello World!");   
  4.     }   
  5. }  

這個(gè)看起來怎么樣?很討厭,是嗎?現(xiàn)在,Visual Studio有一個(gè)內(nèi)置特性,可以完美地格式化代碼。要做到這一點(diǎn),只需到相關(guān)的類中按CTRL + K和CTRL + d,看到了嗎?很酷,是嗎?

 

編寫干凈的C#代碼技巧

在需要的時(shí)候添加注釋

這是我們所有開發(fā)人員都討厭的事情,不是嗎?然而,從長(zhǎng)遠(yuǎn)來看,添加幾行評(píng)論/描述的方法確實(shí)能幫助你和其他開發(fā)人員。Visual Studio使它變得更加容易,只要在相關(guān)的方法上面輸入///,VS就會(huì)自動(dòng)為您生成一個(gè)包含方法參數(shù)的注釋模板。

 

編寫干凈的C#代碼技巧

為什么這么酷?無論何時(shí)(從任何地方)調(diào)用這個(gè)方法,Visual Studio都會(huì)顯示您的注釋。相信我,這很有幫助。

 

編寫干凈的C#代碼技巧

P.S. 只有在情況需要的時(shí)候才添加評(píng)論。例如,當(dāng)某個(gè)特定方法過于復(fù)雜,需要深入解釋時(shí)。在這種情況下,您需要添加注釋。記住,維護(hù)注釋也將成為一項(xiàng)任務(wù),因此要有節(jié)制地使用注釋。

重用代碼

編寫可重用的代碼是非常重要的。它可以減少項(xiàng)目中的總代碼行數(shù),并提高效率。您不希望通過多個(gè)類復(fù)制粘貼一個(gè)函數(shù)。相反,您可以做的是創(chuàng)建一個(gè)共享庫項(xiàng)目,并在每個(gè)必需的項(xiàng)目中引用它。通過這種方式,我們構(gòu)建了可重用的函數(shù)。而且,如果需要進(jìn)行任何修改,您只需要更改共享庫中的代碼,而不是在任何地方更改。

保持類盡可能小

根據(jù)Solid原則,您必須將類隔離為只有一個(gè)職責(zé)函數(shù)的小塊。這有助于我們實(shí)現(xiàn)松散耦合的代碼。確保您在查看類時(shí)不需要反復(fù)滾動(dòng)。這可以是一個(gè)一般的經(jīng)驗(yàn)法則。

使用設(shè)計(jì)模式

這可能是架構(gòu)師級(jí)別的開發(fā)人員需要做的事情。確定將哪種設(shè)計(jì)模式應(yīng)用于哪種場(chǎng)景需要大量的經(jīng)驗(yàn)。設(shè)計(jì)模式基本上是能夠在架構(gòu)解決方案時(shí)提供可重用解決方案的模式。

把您的解決方案組織好

你構(gòu)建結(jié)構(gòu)化的解決方案嗎?建立一個(gè)這樣的系統(tǒng)是非常令人滿意和重要的。下面是我遵循洋蔥架構(gòu)的一個(gè)解決方案。

 

編寫干凈的C#代碼技巧

在單個(gè)項(xiàng)目中仍然可以完成所有工作。但是,為了支持可伸縮性和松散耦合的解決方案,我們將它們分成不同的層,如應(yīng)用程序、領(lǐng)域、基礎(chǔ)設(shè)施等。

這里還有一些其他的優(yōu)勢(shì):

  • 可重用性——如果您想將同一個(gè)項(xiàng)目用于另一個(gè)解決方案,您可以這樣做。
  • 改進(jìn)的安全性
  • 高度可維護(hù)的
  • 可伸縮的
  • 控制反轉(zhuǎn)等

避免魔法字符串/數(shù)字

什么是魔法字符串?它們是直接在應(yīng)用程序代碼中指定的字符串,對(duì)應(yīng)用程序的行為有直接影響。換句話說,不要在應(yīng)用程序中使用硬編碼的字符串或值。當(dāng)應(yīng)用程序增長(zhǎng)時(shí),跟蹤這些字符串是很困難的。此外,這些字符串可以與某種外部引用相關(guān)聯(lián),如文件名、文件路徑、URL等。在這種情況下,當(dāng)資源的位置發(fā)生變化時(shí),必須更新所有這些神奇的字符串,否則應(yīng)用程序?qū)⒅袛?。考慮下面的例子:

  1. if(userRole == "Admin")   
  2. {   
  3.     //logic here   

你可以這樣寫:

  1. const string ADMIN_ROLE = "Admin"   
  2. if(userRole == ADMIN_ROLE )   
  3. {   
  4.     //logic here   

或者,您也可以為用戶角色創(chuàng)建枚舉并簡(jiǎn)單地使用它。這是一種更簡(jiǎn)潔的編寫代碼的方式。

刪除未使用的代碼

通常會(huì)有注釋掉未使用代碼的做法,這最終會(huì)增加應(yīng)用程序編譯時(shí)的代碼行數(shù)。你不應(yīng)該這樣做。您可以使用像Git這樣的源控件來確保您可以在任何時(shí)候恢復(fù)。寧愿使用Git而不是注釋掉代碼。

使用方法鏈接

這是Microsoft在默認(rèn)生成代碼中廣泛使用的一種常見技術(shù)。在這里,每個(gè)方法返回一個(gè)對(duì)象,這些函數(shù)將被鏈接在一起。認(rèn)識(shí)嗎?這是方法鏈接的一個(gè)很好的例子。

  1. services.AddHealthChecks().AddSqlServer(_configuration.GetConnectionString("DefaultConnection"));  

下面是一個(gè)詳細(xì)的例子。我們有一個(gè)student類和另一個(gè)創(chuàng)建并返回?cái)?shù)據(jù)填充student對(duì)象的隨機(jī)方法。

  1. public class Student   
  2. {   
  3.     public string Name { get; set; }   
  4.     public int Age { get; set; }   
  5. }   
  6. public Student SomeMethod()   
  7. {   
  8.     Student testStudent = new Student();   
  9.     testStudent.Name = "Jay Krishna Reddy";   
  10.     testStudent.Age = 25;   
  11.     return testStudent;   
  12. }  

對(duì)我們開發(fā)人員來說,設(shè)置Student對(duì)象的值可能不是問題。但是,讓我們假設(shè)一個(gè)單元測(cè)試開發(fā)人員必須在您的類上進(jìn)行測(cè)試,并且實(shí)際上沒有C#,或者您想通過簡(jiǎn)化整個(gè)過程來取悅您的客戶。這就是連貫接口的用武之地。創(chuàng)建一個(gè)新的連貫類,如下所示:

  1. public class StudentFluent   
  2. {   
  3.     private Student student = new Student();   
  4.     public StudentFluent AddName(string name)   
  5.     {   
  6.         student.Name = name;   
  7.         return this;   
  8.     }   
  9.     public StudentFluent AddAge(int age)   
  10.     {   
  11.         student.Age = age;   
  12.         return this;   
  13.     }   
  14. }   
  15. public StudentFluent SomeMethod()   
  16. {   
  17.     return new StudentFluent().AddName("Jay Krishna Reddy").AddAge(25);   
  18. }  

這很有意義,并且在一個(gè)全新的層次上提高了可讀性,對(duì)嗎?方法鏈接的另一個(gè)簡(jiǎn)單例子如下:

  1. public string AnotherMethod()   
  2. {   
  3.     string name = "Jay Krishna";   
  4.     return name.Replace("J""A").Replace("A""J").Replace(".", string.Empty);   
  5. }   

使用異步/等待

異步編程是最好的選擇!異步編程在處理需要一些時(shí)間才能完成計(jì)算的函數(shù)時(shí),有助于提高總體效率。在這樣的函數(shù)執(zhí)行期間,對(duì)于最終用戶來說,整個(gè)應(yīng)用程序似乎是凍結(jié)的。這導(dǎo)致了糟糕的用戶體驗(yàn)。在這種情況下,我們使用異步方法來釋放主線程。

不要在catch塊使用Throw ex

您確實(shí)不希望只是在捕獲異常并丟失堆棧跟蹤數(shù)據(jù)后對(duì)其進(jìn)行“throw ex”。 只需使用“throw”即可。 通過使用此方法,您還可以存儲(chǔ)堆棧跟蹤,這對(duì)于診斷很重要。

不建議寫法

  1. try   
  2. {   
  3.     // Do something..   
  4. }   
  5. catch (Exception ex)   
  6. {   
  7.     throw ex;   
  8. }   

建議寫法

  1. try   
  2. {   
  3.     // Do something..   
  4. }   
  5. catch (Exception ex)   
  6. {   
  7.     throw;   
  8. }  

使用三元運(yùn)算符

考慮下面的例子,我相信你們很多人仍然在遵循這一做法。

  1. public string SomeMethod(int value)   
  2. {   
  3.     if(value == 10)   
  4.     {   
  5.         return "Value is 10";   
  6.     }   
  7.     else   
  8.     {   
  9.         return "Value is not 10";   
  10.     }   

但如果有更好更清潔的方法呢?引入三元操作符。

現(xiàn)在我們之前寫的多行代碼可以使用三元運(yùn)算符縮減為一行,您可以開始想象這將節(jié)省多少行代碼!

  1. public string SomeMethod(int value)   
  2. {   
  3.     return value == 10 ? "Value is 10" : "Value is not 10";   
  4. }  

使用Null合并操作符

類似地,我們還有另一個(gè)操作符,可以在進(jìn)行null檢查時(shí)派上用場(chǎng)。??這個(gè)操作符在C#中稱為Null合并操作符。

考慮另一個(gè)例子,下面是一個(gè)接受Student對(duì)象作為參數(shù)并檢查空對(duì)象的小函數(shù)。如果為空,返回一個(gè)帶有數(shù)據(jù)的新對(duì)象,否則返回相同的對(duì)象。

  1. public Student SomeMethod(Student student)   
  2. {   
  3.     if (student != null)   
  4.     {   
  5.         return student;   
  6.     }   
  7.     else   
  8.     {   
  9.         return new Student() { Name = "Jay Krishna Reddy" };   
  10.     }   
  11. }   

讓我們添加操作符并縮小這個(gè)函數(shù)!

  1. public Student SomeMethod(Student student)   
  2. {   
  3.     return student ?? new Student() { Name = "Jay Krishna Reddy" };   
  4. }  

首選字符串插值

每次您要向字符串添加動(dòng)態(tài)值時(shí),我們都傾向于使用復(fù)合格式或僅使用加號(hào)將其添加。

  1. public string SomeMethod(Student student)   
  2. {   
  3.     return "Student Name is " + student.Name + ". Age is " + student.Age;   
  4. }  

從C# 6開始,引入了String Interpolation功能。 這提供了一種更具可讀性和涼爽性的語法來創(chuàng)建格式化的字符串。 這是使用內(nèi)插字符串的方法。

  1. public string SomeMethod(Student student)   
  2. {   
  3.     return $"Student Name is {student.Name}. Age is {student.Age}";   
  4. }   

使用表達(dá)體法

這樣的方法用于方法體甚至比方法定義本身小得多的場(chǎng)景中。為什么要浪費(fèi)括號(hào)和代碼行呢?下面是編寫表達(dá)式體方法的方法。

  1. public string Message() => "Hello World!";  

避免太多參數(shù)

太多的參數(shù)總是一場(chǎng)噩夢(mèng)。如果你傾向于有超過3個(gè)參數(shù)輸入到任何方法,為什么不把它包裝到一個(gè)請(qǐng)求對(duì)象或其他東西,然后傳遞?讓我們看一個(gè)小例子。

  1. public Student SomeMethod(string name, string city, int age, string section, DateTime dateOfBirth)   
  2. {   
  3.     return new Student()   
  4.     {   
  5.         Age = age,   
  6.         Name = name,   
  7.         //Other parameters too   
  8.     };   
  9. }   

你可能希望它是這樣的。

  1. public Student SomeMethod(Student student)   
  2. {   
  3.     return student;   
  4. }    

不要忽略捕捉到的錯(cuò)誤

這是我一直在做的事情。你們很多人很有可能也會(huì)這樣做。我們添加了一個(gè)try-catch塊并忽略了錯(cuò)誤處理,對(duì)嗎?處理此類錯(cuò)誤并將其記錄到表或磁盤是一種很好的實(shí)踐。

  1. public void SomeMethod()   
  2. {   
  3.     try   
  4.     {   
  5.         DoSomething();   
  6.     }   
  7.     catch   
  8.     {   
  9.    
  10.     }   
  11. }   
  12. public void SomeMethod()   
  13. {   
  14.     try   
  15.     {   
  16.         DoSomething();   
  17.     }   
  18.     catch (Exception ex)   
  19.     {   
  20.         LogItSomewhere(ex);   
  21.     }   
  22. }   

 

責(zé)任編輯:未麗燕 來源: 今日頭條
相關(guān)推薦

2023-03-27 15:05:10

Python技巧

2017-09-14 12:45:35

2022-06-07 09:30:35

JavaScript變量名參數(shù)

2020-08-27 07:00:00

代碼軟件應(yīng)用程序

2022-07-18 10:15:16

Python

2023-01-27 14:53:03

2024-08-06 12:35:42

C#代碼重構(gòu)

2024-02-23 08:00:00

2024-06-24 10:31:46

2014-11-10 09:59:08

jQuery

2014-07-29 13:55:10

程序員代碼

2022-03-09 09:00:00

代碼技巧程序員

2015-05-11 10:48:28

代碼干凈的代碼越少越干凈

2009-08-27 16:54:59

C#開發(fā)技巧

2009-08-11 15:44:05

C#基本技巧

2009-08-12 14:01:17

C# Excel編程技

2009-08-12 18:04:44

編寫C#多線程

2009-08-25 15:38:12

C# Windows服

2009-08-18 17:08:50

C#編寫XML文檔

2009-08-25 13:26:49

C#編寫asp+
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)