1
CODE CONVENTION
(Chuẩn viết code và thiết kế giao diện) Hà Nội, Ngày 11/02/2011
2
1.1 Chuẩn đặt tên trong Winform. ....................................................................... 28
3
1.2 Chuẩn thiết kế giao diện các thành phần control của WinForm. ....................... 29
1.2 Chuẩn thiết kế giao diện các thông báo(Message). ......................................... 32
2. Chuẩn thiết kế giao diện Webform. ....................................................................... 33
2.1 Chuẩn đặt tên các thành phần control của ASP.NET. ...................................... 33
2.2 Tiêu chuẩn tối ưu. ........................................................................................ 34
2.3 Tiêu chuẩn về hiển thị. ................................................................................. 34 4
I. MỞ ĐẦU
1. Mục đích
Mục đích của tài liệu là hướng dẫn thi hành viết mã và thiết kế giao diện Winform và
Webform theo quy ước và chuẩn hoá sự trình bày mã nguồn và thiết kế giao diện của các
developer .
2. Phạm vi
Sử dụng nội bộ
3. Thuật ngữ và viết tắt
Thuật ngữ Diễn giải 4. Tham khảo
STT Tài liệu
string fullMessage = "Hello " + name;
...
}
6. Sử dụng tiền tố “I” với kiểu Pascal cho các giao diện.
Ví dụ:
Ientity, IExportProvider
7. Không sử dụng ký hiệu Hungary cho tên biến.
Ví dụ:
Sai:
string m_sName;
int nAge;
6
Đúng:
string name;
int age;
8. Sử dụng từ có ý nghĩa mô tả cho biến và không sử dụng từ viết tắt.
Ví dụ:
Đúng:
string address
int salary
Sai:
string nam
string addr
9. Không sử dụng chữ cái đơn để đặt tên ví dụ như i, n, s…
Trường hợp ngoại lệ là khi nó được sử dụng trong vòng lặp.
Hyperlink hlk
DropDownList ddl
ListBox lst
DataList dtl
Repeater rep
Checkbox chk
CheckBoxList cbl
RadioButton rdo
RadioButtonList rbl
Image img
Panel pnl
PlaceHolder phd
Table tbl
Validators val
19. Tên tập tin phải phù hợp với tên lớp.
Ví dụ: class HelloWorld thì tên tập tin là HelloWorld.cs
8
20. Sử dụng kiểu Pascal cho tên tập tin.
21. Không sử dụng các chữ cái có thể bị lẫn với chữ số và ngược lại.
Ví dụ:
: bool b001 = (lo == l0) ? (I1 == 11) : (lOl !=
101);
2. Vòng lặp.
1. Không thay đổi giá trị biến lặp trong vòng lặp For:
Cập nhật các biến lặp trong vòng lặp thường gây nhầm lẫn thậm chí sẽ còn tệ hơn
nếu bạn thay đổi biến lặp tại hơn một vị trí. Luật này áp dụng cho cả vòng lặp
Foreach.
2. Thay đổi giá trị biến lặp gần nơi điều kiện của vòng lặp được chỉ định.
+ Khi một lớp được khai báo là “abstract” khi đó một bộ khởi dựng “protected”
được yêu cầu.
2. Câu lệnh “If - Else” và “Switch” sẽ được sử dụng khi vòng lặp phụ thuộc vào giá trị
của đối tượng. Ràng buộc động sẽ được sử dụng khi vòng lặp phụ thuộc vào loại của
đối tượng.
4. Ngoại lệ
1. Không bao giờ đưa ra một “Catch Exception” mà không làm gì cả. Nếu bạn che giấu
một ngoại lệ bạn sẽ không bao giờ biết một ngoại lệ có xảy ra hay không. Rất nhiều
nhà phát triển sử dụng phương pháp này để bỏ qua các lỗi không đáng kể. Nên
tránh các ngoại lệ bằng cách kiểm tra tất cả các lỗi điều kiện lập trình. Trong mọi
trường hợp bắt một ngoại lệ mà không làm gì cả là không được phép.
2. Trong trường hợp ngoại lệ hãy đưa ra một thông báo thân thiện tới người sử dụng.
Đưa ra chỉ tiết nhất các thông tin về lỗi(nếu có thể).
3. Chỉ bắt ngoại lệ cụ thể không phải chung chung.
Ví dụ:
Tốt:
void ReadFromFile ( string fileName )
{
try
{
// read from file.
}
catch (FileIOException ex)
{
// log error.
// re-throw exception depending on your
case.
throw;
}
hay chưa, nếu ngoại lệ xảy ra, nó sẽ cho rằng bản ghi đã tồn tại. Điều này không
được phép. Bạn nên kiểm tra các lỗi hơn là chờ đợi một ngoại lệ xảy ra. Mặt khác,
bạn nên sử dụng bộ xử lý ngoại lệ khi bạn làm việc với hệ thống bên ngoài như
mạng lưới, thiết bị phần cứng,.. Các hệ thống như vậy thường thất bại bất cứ lúc nào
và kiểm tra lỗi không đáng tin cậy. Trong những trường hợp này bạn nên sử dụng bộ
xử lý ngoại lệ và cố gắng khắc phục lỗi.
6. Không nên viết một khối Try-Catch lớn. Nếu cần thiết chỉ viết mỗi khối Try – Catch
cho một công việc mà bạn thực hiện. Điều này giúp bạn dễ dàng tìm được đoạn mã
nguồn nào của bạn đưa ra ngoại lệ để đưa ra thông báo cho người dùng.
7. Chỉ đưa ra ngoại lệ trong trường hợp đặc biệt.
8. Không dùng khối Try- Catch cho vòng lặp.
9. Không lồng một khối Try – Catch trong một khối catch khác.
5. Sự kiện.(Events)
1. Luôn luôn kiểm tra thể hiện của một sự kiện có null không trước khi gọi.
2. Luôn sử dụng mặc định EventHandler và EventArgs cho hầu hết những sự kiện đơn
giản.
11
6. Biến và kiểu dữ liệu(Various data types)
1. Sử dụng kiểu “enum” bất cứ nơi nào cần thiết, không dùng kiểu số và kiểu chuỗi để
chỉ ra các giá trị riêng rẽ.
Ví dụ:
Tốt:
enum MailType
{
Html,
PlainText,
Attachment
}
12
case "PlainText":
// Do something
break;
case "Attachment":
// Do something
break;
default:
// Do something
break;
}
}
2. Cố gắng khởi tạo biến tại nơi mà bạn khai báo chúng.
3. Luôn sử dụng bí danh của kiểu dữ liệu được xây dựng trong C# hơn là dùng của hệ
thống kiểu chung của .NET.
Ví dụ:
short không dùng System.Int16
int không dùng System.Int32
long không dùng System.Int64
string không dùng System.String
4. Khai báo các biến thành viên kiểu “Private”. Sử dụng các thuộc tính truy cập để cung
cấp khả năng truy cập tới chúng như “Public”, “Protect”, “Internal”.
5. Chỉ sử dụng kiểu “long” cho các biến có khả năng chứa đựng giá trị lớn hơn kiểu
“int”.
6. Sử dụng kiểu “double” cho phân số để đảm bảo độ chính xác trong tính toán.
7. Sử dụng kiểu “int” cho những giá trị số không phải phân số, các biến đó sẽ phù hợp
với kiểu dữ liệu “int” ngay cả khi biến đó dùng cho một số không âm.
8. Sử dụng kiểu “float” cho các phân số khi nó không phù hợp với kiểu “double” hay
“Decimal”.
là 4.
8. Sử dụng một dòng trắng để phân chia nhóm mã nguồn có cùng logic.
9. Chỉ nên có một dòng trắng để tách biệt 2 phương thức trong một lớp.
8. Ghi chú.
1. Tất cả các ghi chú nên được viết bằng cùng ngôn ngữ (tiếng Anh), đúng ngữ pháp và
chứa các dấu câu thích hợp.
2. Dùng ký hiệu // hoặc /// không dùng /*….*/.
3. Không dùng nhiều dấu sao “*” cho khối comment.
Ví dụ:
//******************
//Comment block
//******************
4. Comment nên được viết cùng mức thụt đầu dòng với code.
Ví dụ:
Tốt:
// Format a message and display
string fullMessage = "Hello " + name;
DateTime currentTime = DateTime.Now;
string message = fullMessage + ", the time is : " +
currentTime.ToShortTimeString();
MessageBox.Show ( message );
14 Không tốt:
// Format a message and display
string fullMessage = "Hello " + name;
DateTime currentTime = DateTime.Now;
của 2 hay nhiều bảng với một điều kiện liên kết. Vì thế trong trường hợp này nên
xem xét tới việc nối tên của các bảng cơ sở làm tên View.
Ví dụ: Một view được lấy dữ liệu từ 2 bảng „Customer‟ và bảng „Address‟ vậy tên
view sẽ tương ứng là „CustomerAddress‟.
3. Thủ tục.
- Tên thủ tục được viết liền bằng tiếng Anh.
- Tên thủ tục nên sử dụng các động từ mô tả hành động mà nó thực hiện. Ví dụ:
'GetCustomerDetails'.
- Giống như đã trình bày với quy tắc đặt tên bảng, bạn có thể nhóm các thủ tục có
cùng nhóm logic vào một nhóm sử dụng tiền tố. Ví dụ có các thủ tục xử lý vấn đề
liên quan tới bảng “Order” bạn có thể viết:
ORD_InsertOrder
ORD_InsertOrderDetails
ORD_ValidateOrder
- Không nên đặt tên thủ tục với tiền tố “sp_”, tiền tố tên này giành riêng cho thủ tục
hệ thống.
4. Trigger.
- Tên trigger được viết liền bằng tiếng Anh.
- Tên trigger nên có sự liên hệ với tên bảng mà nó phụ thuộc.
16
- Tên trigger nên có các ký tự thể hiện loại của nó. Insert – ins, Update – upd,
Delete – del.
Ví dụ sau là các trigger phụ thuộc bảng titles
titles_instrg
titles_updtrg
titles_deltrg
- Nếu trigger của bạn thực hiện hơn 2 công việc ví như insert và update bạn viết:
titles_InsUpdtrg
5. Index.