Quy tắc đặt tên và tiêu chuẩn lập trình trong C#


Quy ước đặt tên và tiêu chuẩn

1. Quy tắc Pascal: Viết hoa chữ cái đầu tiên của mỗi từ (VD: Student, StudentDetail, ...)
* Sử dụng cho: Phương thức (method), Giao tiếp (Interface), Tập hợp (Enum), Sự kiện (Events), Ngoại lệ (Exception), Không gian tên (NameSpace), Thuộc tính (Property)
2. Quy tắc Camel: Viết thường từ đầu tiên và viết hoa chữ cái đầu tiên của từ kế tiếp (VD: student, studentDetail,...)
* Sử dụng cho: Tầm vực biến (Protected/Private), các Tham số (Parameter)

Sử dụng quy tắc Pascal cho phương thức:
public class HelloWorld{  
  ...  
}  
Sử dụng quy tắc Pascal cho phương thức:
public class HelloWorld{
  void SayHello(string name){
      ...
  }
}
Sử dụng quy tắc Camel cho biến và tham số của phương thức 
public class HelloWorld{
 int totalCount = 0;
 void SayHello(string name){
  string fullMessage = "Hello " + name;
  ...
 }
}
- Không nên sử dụng các tiền tố kèm dấu như: M_ để đặt tên biến, ví dụ như 
       string m_sName;
       int nAge;
Mặc dù khai báo như vậy hợp lệ, nhưng chuẩn viết code .NET không khuyến cáo sử dụng. Tất cả biến nên dùng quy tắc Camel, sử dụng các từ có nghĩa, mô tả được tên biến 

- Không dùng chữ viết tắt, tên, từ địa phương,... mà hãy dùng từ rõ nghĩa như: name, address, phone,...
- Không đặt tên biến một ký tự như: i, x, n,... mà hãy đặt tên biến như index, temp. Ngoại trừ trường hợp sử dụng trong vòng lặp như sau: 
for ( int i = 0; i < count; i++ ){
     ...
}
Nếu biến chỉ được sử dụng để đếm và không sử dụng ở bất kì nơi nào ngoài vòng lặp, nhiều người thích dùng (i) để đặt tên cho biến. 

- Không dùng dấu gạch dưới (_) trong tên biến
Tên NameSpace nên theo chuẩn như sau
<company name="">.<product name="">.<top level="" module="">.<bottom level="" module=""></bottom></top></product></company>

- Tên file nên đặt trùng với tên lớp. Ví dụ: với lớp HelloWorld thì tên file nên là HelloWorld.cs (or HelloWorld.vb)
- Thụt lề: Nên dùng TAB thay về space (phím cách)
- Ghi chú (comment) nên cùng cấp với đoạn mã muốn comment. Cặp dấu ngoặc nhọn ({}) cũng nên cùng cấp với đoạn mã.
Cách ra một dòng để tăng tính rõ ràng của mã
bool SayHello (string name){
  string fullMessage = "Hello " + name;
  DateTime currentTime = DateTime.Now;
    string message = fullMessage + ", the time is : " + currentTime.ToShortTimeString();
  MessageBox.Show ( message );
  if ( ... ) {
        // Do something
        // ...
        return false;
  }
        return true;
  }
- Với if, if-else, for, while, do-while dù chỉ có một hay nhiều dòng lệnh, cũng nên cho vào trong cặp dấu ngoặc nhọn ({}) 
if ( ... ) {
      // Do something
}
Nguyên tắc viết code:

Để tránh trường hợp file (.cs, .vb) quá lớn.

Nếu một file có hơn 300-400 dòng lệnh, bạn nên nghĩ đến việc chia nhỏ nó vào các Class
Tránh viết các phương thức dài, một phương thức thông thường chỉ nên từ 1-25 dòng lệnh. Nếu một phương thức có hơn 25 dòng lênh, bạn nên chia nhỏ thành các phương thức xử lý riêng. 
Tên phương thức cần rõ ý, nêu được mục đích của phương thức. Nếu bạn đặt tên phương thức rõ ràng, bạn sẽ không cần phải viết tài liệu miêu tả về ý nghĩa của phương thức.
Tốt - Tên phương thức rõ nghĩa 
void SavePhoneNumber ( string phoneNumber )
{
  // Save the phone number.
}
Không tốt - Tên phương thức không rõ nghĩa 
// This method will save the phone number.
void SaveData ( string phoneNumber )
{
  // Save the phone number.
}
Một phương thức chỉ nên xử lý một công việc. Không nên gộp quá nhiều "trách nhiệm" cho một phương thức
Tốt 
 void SaveAddress ( string address )
 {
  // Save the address.
  // ...
 }

 void SendEmail ( string address, string email )
 {
  // Send an email to inform the supervisor that the address is changed.
  // ...
 }
Không tốt 
 // Save address and send an email to the supervisor
 // to inform that the address is updated.
 SaveAddress ( address, email );
 void SaveAddress ( string address, string email )
 {
  // Job 1.
  // Save the address.
  // ...
 // Job 2.
  // Send an email to inform the supervisor that the address is changed.
  // ...
 }
Sử dụng kiểu dữ liệu đặc trưng thay vì sử dụng từ lớp
Tốt 
 int age;
 string name;
 object contactInfo;
Không tốt 
 Int16 age;
 String name;
 Object contactInfo;
Nên sử dụng Enum ở bất kì nơi nào cần thiết. Không nên dùng số hay chuỗi để kiểm tra các giá trị
Tốt 
enum MailType
 {
  Html,
  PlainText,
  Attachment
 }
 void SendMail (string message, MailType mailType)
 {
  switch ( mailType )
  {
   case MailType.Html:
    // Do something
    break;
   case MailType.PlainText:
    // Do something
    break;
   case MailType.Attachment:
    // Do something
    break;
   default:
    // Do something
    break;
  }
 }
Không tốt 
void SendMail (string message, string mailType)
{
  switch ( mailType )
  {
   case "Html":
    // Do something
    break;
   case "PlainText":
    // Do something
    break;
   case "Attachment":
    // Do something
    break;
   default:
    // Do something
    break;
  }
}
      Nên sử dụng private thay vì public hay protected cho biến. Nếu muốn, hãy dùng properties và thiết lập code để bảo vệ tài nguyên. 
      Không sử dụng được dẫn tĩnh cục bộ trong lập trình ("D:\software\..."). Hãy sử dụng đường dẫn tương đối ("../images/home.jpg")
      Trước khi chương trình hiển thị, hãy kiểm tra lại toàn bộ các yêu cầu về tập tin, ràng buộc, kiểm tra liên kết cơ sở dữ liệu, ... để đảm bảo rằng chương trình sẽ hoạt động tốt
      Nếu phát hiện lỗi phát sinh, nên thông báo cho người dùng biết và "ghi chú" lại để có thể thực hiện các bước kiểm tra và khắc phục lỗi hoặc tạo các bản cập nhật.

Related Posts
Previous
« Prev Post