Tải bản đầy đủ (.pdf) (41 trang)

FSC - CodeConvention(chuẩn viết code và thiết kế giao diện)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (743.89 KB, 41 trang )

1












CODE CONVENTION
(Chuẩn viết code và thiết kế giao diện)














Hà Nội, Ngày 11/02/2011
2




I. MỞ ĐẦU .................................................................................................................... 4
1. Mục đích ............................................................................................................... 4
2. Phạm vi ................................................................................................................. 4
3. Thuật ngữ và viết tắt ............................................................................................. 4
4. Tham khảo ............................................................................................................ 4
II. CHUẨN VIẾT CODE TRONG C# ............................................................................... 5
1. Quy tắc đặt tên ...................................................................................................... 5
2. Vòng lặp. ............................................................................................................... 8
3. lập trình hướng đối tượng ....................................................................................... 8
4. Ngoại lệ ................................................................................................................. 9
5. Sự kiện.(Events) .................................................................................................. 10
6. Biến và kiểu dữ liệu(Various data types) ................................................................ 11
7. Khuôn dạng code. ................................................................................................ 13
8. Ghi chú. .............................................................................................................. 13
III. CHUẨN VIẾT CODE TRONG SQL SERVER. .............................................................. 15
1. Chuẩn đặt tên trong SQL SERVER. ........................................................................ 15
2. Chuẩn viết mã nguồn trong SQL Server. ................................................................ 17
3. Kiểu dữ liệu. ........................................................................................................ 18
4. Thủ tục. .............................................................................................................. 18
5. Các cân nhắc khi viết lệnh(Performance considerations) ......................................... 19
IV. CHUẨN VIẾT CODE TRONG ORACLE PL/SQL. ......................................................... 20
1. Chuẩn đặt tên trong ORACLE PL/SQL. ................................................................... 20
2. Khuôn dạng code. ................................................................................................ 21
3. Sử dụng ngôn ngữ.(Language Usage). .................................................................. 22
1.1 Xử lý ngoại lệ. .............................................................................................. 26
1.2 Đối tượng lưu trữ. ........................................................................................ 27
V. CHUẨN THIẾT KẾ GIAO DIỆN. .............................................................................. 28
1. Chuẩn thiết kế giao diện Winform. ........................................................................ 28

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






5

II. CHUẨN VIẾT CODE TRONG C#
1. Quy tắc đặt tên
1. Sử dụng tiếng Anh để khai báo tên.
Ví dụ: magnetization, optimizing, realize, ...
2. Sử dụng kiểu Pascal và Camel để đặt tên.
- Với kiểu Pascal chữ cái đầu tiên của mỗi từ được viết hoa.
Ví dụ: BackColor.
- Với kiểu Camel chỉ chữ cái của từ thứ 2, thứ 3,… được viết hoa.
Ví dụ: backColor.
3. Sử dụng kiểu Pascal cho tên lớp.
Ví dụ:
public class HelloWorld
{
...
}
4. Sử dụng kiểu Pascal cho tên phương thức.
Ví dụ:
void SayHello(string name)
{
...
}

5. Sử dụng kiểu Camel cho tên biến và tham số của phương thức.
Ví dụ:
int totalCount = 0;
void SayHello(string name)
{

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.

Ví dụ:
for ( int i = 0; i < count; i++ )
{
...
}
10. Không sử dụng dấu gạch dưới „_‟ cho tên biến cục bộ
11. Tất cả các biến thành viên đều được bắt đầu bằng dấu gạch dưới “m_” để phân biệt
với biến cục bộ. Phần còn lại của tên biến được sử dụng cú pháp Pascal
12. Không sử dụng tên biến trùng với các từ khóa.
13. Thêm tiền tố “is” cho tên biến, phương thức và thuộc tính Boolean.
Ví dụ:
private bool isFinished
14. Phương thức trả về giá trị nên có tên mô tả giá trị được trả về.
Ví dụ:
GetObjectState().
15. Các biến thành viên nên được khai báo trên cùng và trên từng dòng tách biệt.
16. Khai báo biến cục bộ gần nơi đầu tiên nó được sử dụng.
17. Tên của không gian(namespace) tên phải theo khuôn dạng chuẩn sau:
<company name>.<product name>.<top level module>.<bottom level
module>
18. Quy định đặt tên cho các thành phần giao diện của Winform. cách đặt tiền tố theo
bảng sau:
Coltrol Tiền tố
7

Label lbl
TextBox txt
DataGrid dtg
Button btn
ImageButton imb

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.

3. Tất cả các điều khiển If, Else, While, Do, Swicth phải được theo sau bởi một cặp dấu
ngoặc nhọn ({ }) ngay cả khi trong thân nó rỗng.
Ví dụ:
// Count number of elements in array.
for (int i = 0; i < y; i++)
{
}

Ngoại lệ:
- Nếu câu lệnh “else” có thể trực tiếp theo sau một câu lệnh “if”.
- Nếu mệnh đề “if” theo sau bởi một câu lệnh đơn thì không cần đặt nó trong một
khối và toàn bộ câu lệnh sẽ được viết trên một dòng.
Ví dụ:
if (x < 10) x = 0;

4. Tất cả các khối lệnh switch đều phải có nhãn “Default” như là nhãn “Case” cuối cùng.
5. Không so sánh rõ ràng điều kiện là đúng hay sai.
Ví dụ:
while (condition == false) // Sai
while (condition != true) // Sai
while (((condition == true) == true) == true //Sai

3. lập trình hướng đối tượng
1. Cung cấp một bộ khởi dựng mặc định „Private‟ nếu chỉ có phương thức và thuộc tính
tĩnh (static) trong lớp.
- Ngoại lệ:
9

+ Nếu lớp đó được khai báo là “Static” thì không yêu cầu tạo bộ khởi dựng
“private”.

+ 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;
}

}

Không tốt:
void ReadFromFile ( string fileName )
{
try
{
10

// read from file.
}
catch (Exception ex)
{
// Catching general exception is bad... we will never
know whether
// it was a file error or some other error.
// Here you are hiding an exception.
// In this case no one will ever know that an exception
happened.

return "";
}
}

4. Không cần bắt một ngoại lệ chung trong tất cả các phương thức. Điều này sẽ giúp
bạn tìm thấy hầu hết các lỗi trong chu kỳ phát triển.
5. Không viết khối Try-Catch trong tất cả các phương thức. Chỉ dùng khi có thể có một
ngoại lệ xảy ra và không có cách nào để ngăn chặn. Ví dụ, nếu bạn muốn chèn thêm
một bản ghi mà nó chưa tồn tại trong CSDL, bạn nên Select bản ghi sử dụng khóa.
Một số nhà phát triển cố gắng thêm một bản ghi mà không kiểm tra xem nó tồn tại

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
}


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;

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”.

9. Tránh sử dụng kiểu “float” trừ khi bạn hiểu rõ các tác động khi có sự tính toán.
10. Sử dụng kiểu “decimal” cho phân số khi nó cần được làm tròn tới một độ chính xác
nhất định để tính toán. Điển hình các tính toán liên quan đến tiền bạc.
11. Tránh chỉ định kiểu cụ thể cho một “enum”, sử dụng kiểu mặc định là “int” trừ khi
bạn có nhu cầu cụ thể về việc sử dụng kiểu “long”(rất hiếm).
12. Chỉ khai báo hằng (constants) cho những loại đơn giản.
13. Tránh chuyển đổi trực tiếp thay vào đó sử dụng từ khóa “as” và kiểm tra null.
Ví dụ:
object dataObject = LoadData();
DataSet ds = dataObject as DataSet;

if(ds != null)
13


14. Không bao giờ ghép chuỗi trong vòng lặp
7. Khuôn dạng code.
1. Luôn đặt 2 dấu ngoặc nhọn({ và }) trên một dòng mới.
2. Luôn sử dụng 2 dấu ngoặc nhọn ({ và }) trong câu lệnh điều kiện.
3. Khai báo các biến độc lập trên từng dòng tách biệt.
4. Đặt các Namespace dùng “using” trên đầu của file. Nhóm các Namespace .NET trên
các Namespace tùy biến (custom namespace).
5. Nhóm nội dung trong thân lớp theo thứ tự như sau:
- Biến thành viên.
- Constructors và Finalizers.
- Enums, Structs và Class được lồng vào.
- Thuộc tính.
- Phương thức.
6. Sử dụng “#region” để nhóm các phần code có liên quan tới nhau.
7. Sử dụng Tab để thụt đầu dòng không dùng backspace. Kích thước mặc định của Tab

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;

string message = fullMessage + ", the time is : " +
currentTime.ToShortTimeString();
MessageBox.Show ( message );
5. Luôn luôn dùng khối comment C# (///) cho thuộc tính truy cập “Public”, “Protected”,
và “Internal”.
6. Luôn dùng chú thích <summary> bao gồm <param>, <return> và <exception> bất
cứ nơi nào có thể.
7. Luôn dùng <see cref = “”/> và <seealso cref = “”/> nếu có thể.
15

III. CHUẨN VIẾT CODE TRONG SQL SERVER.
1. Chuẩn đặt tên trong SQL SERVER.
1. Bảng.
- Tên bảng nên được đặt theo tên của thực thể mà nó đại diện. ví dụ thực thể
customer nên đặt tên bảng là customers.
- Nếu trong Cơ sở dữ liệu của bạn có những bảng có cùng logic bạn nên nhóm
chúng vào một nhóm sử dụng tiền tố gồm từ 2 tới 3 ký tự.
Ví dụ: Cơ sở dữ liệu của bạn có các bảng lưu thông tin về Sales và Human bạn
gộp chúng thành 2 nhóm như sau:
SL_NewLeads
SL_Territories
SL_TerritoriesManagers

HM_Candidates
HM_PremierInstitutes
HM_InterviewSchedules
- Tên bảng nên được viết bằng tiếng Anh và không có khoảng trống trong tên.
2. View.
Quy tắc đặt tên view tương tự như với bảng trừ một số ngoại lệ sau.
- View không chỉ đại diện cho một bảng đơn lẻ. Một view có thể là liên kết dữ liệu

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.

Giống trigger index không tự tồn tại một mình mà phụ thuộc một bảng cơ sở. vì thế
tên index nên bao gồm tên bảng và tên cột mà nó được tạo cho. Index có hai loại
Clustered và Nonclustered hai loại này có thể là unique hoặc non-unique vì thế tên
của index cũng nên quan tâm tới loại index.
Cấu trúc tên của index như sau:
Tên bảng + tên cột + U/NU+ Cidx/Nidx
Trong đó:
+ U: Unique.
+ NU: Non Unique.
+ Cidx: Clustered index.
+ Nidx: Non clustered index.
ví dụ 1: index thuộc loại unique clustered
Titles_TitleID_U_Cidx
Ví dụ 2: index thuộc loại noncluster và nonunique
OrderDetails_OrderID_NU_Nidx
- Index có thể được tạo ra trên nhiều cột trong trường hợp này bạn nối tên các cột
lại với nhau.
Ví dụ:
OrderDetails_OrderIDOrderDetailID_U_Cidx
Index trên được tạo ra trên 2 cột OrderID, OrderDetailID
6. Cột.
- Tên cột được viết bằng tiếng Anh không có khoàng trống.
- Tên cột cần có nghĩa và khái quát được nội dung của cột. Ví dụ:

Name
Address
7. Khóa chính.
- Tên khóa chính theo cấu trúc:
Tên bảng + ID
Ví dụ:

×