Qui t c đ t tên namespaces ắc đặt tên namespaces ặt tên namespaces Quy tắc chung cho việc đặt tên namespaces là sử dụng tên công ty và theo sau là tên công nghệ và nếu có chức năng và th
Trang 1Trường Đại Hoc Khoa Hoc Tự Nhiên Khoa Công Nghệ Thông Tin Môn Hoc : Xây Dựng Phần Mềm
Giáo Viên : Ngô Huy Biên
Version 4.0 Date: 17/05/2011 Writer by Group I – XDPM
Trang 2I Giới Thiệu : 4
1 Mục Đích: 4
2 Phạm vi tài liệu: 4
3 Tài liệu tham khảo : 4
II Qui Ước Đặt Tên 4
1 Qui ước viết hoa : 4
1.1 Pascal case – cú pháp Pascal 4
1.2 Camel case – cú pháp Lạc đà 4
1.3 Uppercase 5
2 Qui Ước Viết Tắt 6
3 Chi tiết các chuẩn 6
3.1 Qui tắc đặt tên namespaces 6
3.2 Qui tắc đặt tên Lớp 7
3.3 Qui tắc đặt tên Form 8
3.4 Qui tắc đặt tên kiểu dữ liệu 8
3.5 Qui tắc đặt tên kiểu Enum 9
3.6 Qui tắc đạt tên cho trường Static 9
3.7 Qui tắc đặt tên cho tham biến 10
3.8 Qui tắc đặt tên cho thuộc tính 10
3.9 Qui tắc đặt tên biến 11
3.10 Qui tắc đặt tên biến toàn cục 12
3.11 Qui tắc đặt tên sự kiện 14
3.12 Bảng qui tắc control prefix Name 15
3.13 Qui tắc đặt tên hằng số 17
3.14 Qui tắc lớp kế thừa Attribute 18
3.15 Qui tắc kế thừa Exception 18
3.16 Qui tắc đặt tên hàm phương thức 18
3.17 Qui tắc đặt tên kiểu dữ liệu 19
3.18 Tránh để hàm trả về giá trị boolean trong mệnh đề điều kiện, hãy đặt một biến cục bộ và kiểm tra nó vd : 20
3.19 Luôn sử dụng mảng bắt đầu từ 0; 20
Trong tập hợp có chỉ mục(index), chỉ mục bắt đầu từ không 20
3.20 Luôn luôn khởi tạo mảng reference type bẳng vòng lặp for 20
Trang 3III QUI ƯỚC CODE FORMATS 21
1 Qui ước về Tab 21
2 Qui ước về Block code 21
3 Qui ước Khoảng cách 21
4 Qui ước về comment 21
5 Đặt dấu '{' và dấu '}' riêng biệt ở một dòng 22
6 Tránh đặt nhiều class trong 1 file 23
7 Tránh có nhiều namespace trong 1 file 1 file nên kết hợp các type vào 1 namespace 23
8 Tránh 1 file có nhiều hơn 500 dòng ( không bao gồm mã máy) 23
9 Tránh những phương thức có nhiều hơn 200 dòng 23
10 Tránh những phương thức có hơn 5 đối số 23
11 Một dòng không được quá 120 ký tự 23
12 Không nên tự sửa bất kỳ dòng nào của mã máy 23
13 Tránh ghi chú thích những điểu quá hiển nhiên trog code Tự code nên giải thích nó code được gọi là tốt khi tên biến và tên hàm rõ ràng, không cần giải thích 23
14 Văn bản chỉ dùng để giải thích giải thuật 23
15 Các câu lệnh lồng nhau tối đa 4 cấp 23
16 Các vòng lặp đơn giản có thể được dùng các biến i, j, k, l để đếm 23
17 Khi dùng so sánh biến với số nên viết số trước biến sau 23
18 Khi dùng lệnh switch chú ý có lệnh break trong mỗi case 23
19 Không truy cập hay thay đổi đối tượng nhiều lần trong một biểu thức 23
20 Không sử dụng câu lệnh lựa chọn (if, switch) thay vì một nhiệm vụ đơn giản hoặc khởi tạo 23 21 Exception Handling 24
22 Đừng so sánh rõ ràng với true, false 24
23 Gán object = null để báo rằng object đó không còn cần thiết 24
24 Mỗi dòng code không nên quá dài 24
IV CÀI ĐẶT PROJECT 24
V MÔ TẢ CHI TIẾT FRAMEWORK 26
Trang 41 21/03/2011 1.0 Hoàn thiện dần nội dung bản chuẩn mã nguồn Nhóm I
2 22/04/2011 2.0 Hoàn thiện dần nội dung bản chuẩn mã nguồn Nhóm I
3 13/05/2011 3.0 Hoàn thiện dần nội dung bản chuẩn mã nguồn Nhóm I
4 17/05/2011 4.0 Hoàn thành tài liệu chuẩn mã nguồn Nhóm I
I Giới Thiệu :
1 Mục Đích:
Theo yêu cầu của Thầy cũng như tạo hiệu quả cao trong việc phát triển phần mềm , thống nhất trong phong cách và giảm chi phí cho việc sửa lổi , bảo trì hệ thống Nhóm I xây dựng tài liệu này đưa ra một số đề xuất cũng như mô tả về luật thống nhất cho việc xây dựng phần mềm quản lý Ký Túc Xá mà nhóm đang xây dựng trong môn hoc Xây Dựng Phần Mềm
3 Tài liệu tham khảo :
- Tham khảo slide thuyết trình của nhóm chuẩn mã nguồn thực hiện trong môn hoc
- Bộ chuẩn mã nguồn của phần mềm hoc toán lớp 11
- Bộ chuẩn mã nguồn của phần mềm hoc toán lớp 8
- Bài viết về chuẩn mã nguồn trên Wikipedia
- Có sự tham khảo phần mềm StyleCop
Trang 5II Qui Ước Đặt Tên
1 Qui ước viết hoa :
1.1 Pascal case – cú pháp Pascal
Sau đây là bảng quy tắc cùng với ví dụ:
Enum Value Pascal FatalError
Exception class Pascal WebException
Note: Always ends with the suffix ExceptionRead-only
Static field Pascal RedValue
Interface Pascal IDisposable
Note: Always begins with the prefix I
Trang 6Identifier Case Example
Namespace Pascal System.Drawing
Protected
instance field Camel
redValueNote: Rarely used A property is preferable to using a protected instance field
Public instance
RedValueNote: Rarely used A property is preferable to using a public instance field
2 Qui Ước Viết Tắt
Để tránh sự nhầm lẫn và lạm dụng viết tắt, sau đây là những quy tắc về việc viết tắt:
Không sử dụng quy ước viết tắt hoặc viết rút gọn đối với những định danh tên Ví dụ, sử dụng GetWindow thay vì GetWin
Không sử dụng acronym - những từ mà được cấu tạo từ những chữ đầu của một nhóm từ
mà không được chấp nhận trong lĩnh vực máy tính
Trong trường hợp thích hợp, tốt nhất sử dụng acronym để thay thế cho những tên dài Ví
dụ, sử dụng UI thay cho User Interface and OLAP thay cho On-line Analytical Processing
Khi sử dụng acronym, sử dụng cú pháp Pascal hoặc Lạc đà cho những acronym có nhiều hơn 2 ký tự Ví dụ, sử dụng HtmlButton hoặc htmlButton Tuy nhiên, nên viết hoa tât cả ký
tự khi chỉ gồm 2 ký tự, chẳng hạn System.IO thay vì System.Io
Không viết tắt đối với định danh hoặc tham biến Nếu phải viết tắt thì sử dụng cú pháp Lạc đà của những từ có nhiều hơn 2 ký tự mặc dù mâu thuẫn quy ước viết tắt
3 Chi tiết các chuẩn
3.1 Qui t c đ t tên namespaces ắc đặt tên namespaces ặt tên namespaces
Quy tắc chung cho việc đặt tên namespaces là sử dụng tên công ty và theo sau là tên công nghệ và nếu có chức năng và thiết kế theo sau
CompanyName.Technology[.Feature][.Design]
Trang 7Ví dụ:
Microsoft.Media
Microsoft.Media.Design
- Tên namespace bắt đầu với tên công ty hoặc nhãn khác tránh tình trạng hai
namespace cùng tên Ví dụ, Microsoft.Office
- Namespace phải bao gồm kiểu mà được yêu cầu lúc thiết kế hàm cho namespace cơ
sở với hậu tố Design Ví dụ, namespace System.Windows.Forms.Design bao gồm những trình thiết kế và có liên hệ với lớp cơ sở System.Windows.Forms
- Có một sự lệ thuộc trên kiểu của namespace Chằng hạn, lớp the
System.Web.UI.Design lệ thuộc vào lớp System.Web.UI Tuy nhiên lớp
System.Web.U không lệ thuộc vào lớp System.Web.UI.Design.
- Sử dụng cú pháp Pascal, và ngăn cách những thành phần logic với dấu chấm ( ), như Microsoft.Office.PowerPoint
- Sử dụng tên namespace là số nhiều nếu thích hợp Chằng hạn, sử dụng
System.Collecions hơn là System.Collection Không kể những trường hợp tên viết tắt.Chằng hạn sử dụng System.IO hơn là System.IOs
- Không sử dụng cùng tên cho một namespace và một class Ví dụ, không có cả
namespace Debug và lớp Debug
Tránh sử dụng từ khóa Using trong một namespace :
Trang 8Cuối cùng, chú ý rằng tên namespace không có song song với nó một thư viện liên kết có cùng tên.
3.2 Qui t c đ t tên L p ắc đặt tên namespaces ặt tên namespaces ớp
Sử dụng một danh từ hoặc cụm danh từ
Đôi khi tên class có thể bắt đầu với ký tự I, mặc dù class không phải là một interface
Thỉnh thoảng, sử dụng từ ghép cho một lớp dẫn xuất Thành phần thứ hai của tên lớp dẫn xuất là tên của lớp cơ sở Ví dụ, ApplicationException là tên của một lớp dẫn xuất từ lớp Exception, bởi vì ApplicationException là một loại của Exception
Sau đây là những cách đặt tên lớp đúng quy tắc:
public class FileStream
public class Button
public class String
Tên Class phải phản ánh được nội dung chứa nó Phần mềm xây dựng theo mô hình 3 lớp nên tên Class được qui định như sau : Tên đối tượng + Tên lớp(BUS, DAO, DTO)
VD : KhuBUS , KhuDAO , SinhVienDAO ……
Khi sử dụng kiểu partial để chia một lớp ra thành nhiều file thì phải đặt tên file đúng với tên lớp và nhiệm vụ mà phần lớp chứa trong file đó đảm nhiệm một cách logic:
Trong file MyClass.cs: chứa các thuộc tính và phương thức thực thi của lớp
public partial MyClass
Trang 9public partial MyClass
{
}
Tên của file chứa source code của một lớp(class) phải cùng tên với lớp đó
3.3 Qui t c đ t tên Form ắc đặt tên namespaces ặt tên namespaces
Đặt tên theo Pascal case nhưng phản ảnh được công việc mà form đó thực hiện
VD : QuanLyDienNuoc , ThongTin , QuanLyPhong
3.4 Qui t c đ t tên ki u d li u ắc đặt tên namespaces ặt tên namespaces ểu dữ liệu ữ liệu ệu
Đặt tên theo Pascal case nhưng phản ảnh được nội dung cũng như dữ liệu mà file đó lưu trữ , Nếu tên là từ viết tắt thì sử dụng theo Upper case
VD : RangBuoc.xml , KTX.mdf
3.5 Qui t c đ t tên ki u Enum ắc đặt tên namespaces ặt tên namespaces ểu dữ liệu
Giá trị kiểu Enum được kế thừa từ lớp Enum Sau đây là những quy tắc đặt tên cho
enumerations:
Sử dụng cú pháp Pascal cho kiểu Enum và giá trị tên
Hạn chế viết tắt
Không sử dụng hậu tố Enum trong tên kiểu Enum
Sử dụng tên số ít cho hầu hết những kiểu Enum
Ví dụ, không đặt tên Protocols mà đặt là Protocol
publicenum Protocol
Trang 10 Thường xuyên thêm FlagsAttribute đến một trường bit kiểu Enum.
3.6 Qui t c đ t tên cho tr ắc đặt tên namespaces ạt tên cho trường Static ường Static ng Static
Sử dụng danh từ, cụm danh từ hoặc danh từ viết tắt
Sử dụng cú pháp Pascal
Không sử dụng cú pháp Hungarian cho tên trường static
Nên sử dụng thuộc tính static thay vì public static khi có thể
3.7 Qui t c đ t tên cho tham bi n ắc đặt tên namespaces ặt tên namespaces ến
Không sử dụng tham biến có sẵn Đây là những tham biến riêng
Không sử dụng tên tham biến theo cú pháp Hungari
Ví dụ về tên tham biến đúng:
type GetType(typeName As string)
string Format(string format, object args())
3.8 Qui t c đ t tên cho thu c tính ắc đặt tên namespaces ặt tên namespaces ộc tính
Sử dụng danh từ hoặc cụm danh từ
Trang 11 Sử dụng cú pháp Pascal.
Không sử dụng cú pháp Hungari
Thuộc tính được tạo phải có tên giống với kiểu bên dưới của nó Chằng hạn, thuộc tính Color, thì kiểu của thuộc tính là Color
Ví dụ về cách đặt tên cho thuộc tính:
public class SampleClass
Ví dụ trình bày thuộc tính với tên giống như kiểu
public enum Color
Ví dụ sai vì thuộc tính Color mà kiểu là Integer
public enum Color
Trang 123.9 Qui t c đ t tên bi n ắc đặt tên namespaces ặt tên namespaces ến
Đặt tên biến miêu tả được nội dung/mục đích sử dụng của nó
Tránh đặt tên biến với chỉ một chữ cái, chẳng hạn như i, t thay vào đó ta nên đặt tên là index, temp
Không viết tắt, ví dụ không được viết là num thay cho number
Sử dụng danh từ hoặc cụm danh từ
Sử dụng cú pháp Lạc đà
Sử dụng cú pháp Hungari cho kiểu nguyên thủy
Do not use Hungarian notation for scope of variables
Sử dụng objCommand, objConn, param như là những tên chuẩn cho SQLCommand và SQLConnection, SQLParameter Sử dụng da như là tên cho SqlDataAdapter ad ds cho đối tượng DataSet
Sử dụng i, j, k cho biến đếm
Ví dụ về cách đặt tên đúng cho biến có kiểu dữ liệu nguyên thủy
Trang 13int Int32 int intQuantity
3.10 Qui t c đ t tên bi n toàn c c ắc đặt tên namespaces ặt tên namespaces ến ục
Sử dụng kiểu Camel để đặt tên cho biến cục bộ và đối số của các hàm/phương thức:
public void Method(int myArgument)
Trang 14private int m_SecondVariable;
Đây là dòng trống public void FirstMethod()
Khai báo biến cục bộ gần nhất so với vị trí lần đầu tiên nó được sử dụng:
public List<int> GetRandomIntegersList(int numberOfintegers)
{
List<int> randomIntegerslist = new List<int>();
Random randomCreator = new Random(DateTime.Now.Millisecond);
for (int i = 0; i < numberOfintegers; ++i)
3.11 Qui t c đ t tên s ki n ắc đặt tên namespaces ặt tên namespaces ự kiện ệu
Những luật sau chỉ ra cách đặt tên cho các sự kiện:
Cú pháp Pascal
Không sử dụng cú pháp Hungari
Sử dụng một hậu tố EventHandler trong tên của sự kiện Ví dụ sau khai báo sự kiện Close đúng
public delegate CloseEventHandler(object sender, EventArgs arguments)
Chỉ định 2 biến được đặt tên là sender và e Biến sender thể hiện đối tượng bắt lấy sự
kiện Biến sender luôn có kiểu object, mặc dù nó có thể sử dụng những kiểu khác Tình trạng được kết hợp với sự kiện thì được tóm lượt trong trường hợp của một lớp sự kiện
được đặt tên là e
Tên đối số của một lớp sự kiện với hậu tố EventArgs
Trang 15 Đặt tên sự kiện bằng một động từ Ví dụ, cách đặt tên sự kiện đúng Clicked, Painting, và DroppedDown
Sử dụng gerund (Động từ thêm ing) để tạo ra một sự kiện để miêu tả khái niệm của
pre-event, Và dùng động từ quá khứ để thể hiện post-event Ví dụ, sự kiện Close có thể bị xóa
bỏ nên có các sự kiện Closing và Closed Không sử dụng cách đặt tên sau:
BeforeXxx/AfterXxx
Không sử dụng tiền tố hay hậu tố cho việc khai báo sự kiện Ví dụ, sử dụng Close thay vì OnClose
Tóm lại, bạn nên cung cấp một phương thức protected gọi là OnXxx trong những kiểu sự
kiện có thể bị override từ những lớp ban đầu Phương thức này nên chỉ có biến sự kiện e
Ví dụ sau minh họa sự kiện với các biến
public delegate MouseEventHandler(object sender, MouseEventArgs e ){}
Ví dụ sau minh họa cách đặt tên đúng cho lớp sự kiện
public class MouseEventArgs: EventArgs
Trang 163.12 B ng qui t c control prefix Name ảng qui tắc control prefix Name ắc đặt tên namespaces
Combo box, drop-down list box cbo cboEnglish
Control (used within procedures when
the specific type is unknown)
Trang 17Control type Prefix Example
Hierarchical flex grid flex flexOrders
Trang 18Control type Prefix Example
3.13 Qui t c đ t tên h ng s ắc đặt tên namespaces ặt tên namespaces ằng số ố
Sử dụng kiểu viết hoa để đặt tên cho hằng số Ví dụ:
Const MIN_QUAL = 25
3.14 Qui t c l p k th a Attribute ắc đặt tên namespaces ớp ến ừa Attribute
Sử Hậu tố của lớp kế thừa từ Attribute là Attribute:
public class MyCustomAttribute: Attribute
{
………
}
3.15 Qui t c k th a Exception ắc đặt tên namespaces ến ừa Attribute
Sử Hậu tố của lớp kế thừa từ Exception là Exception:
public class MyCustom Exception: Exception
{
………
}
Trang 193.16 Qui t c đ t tên hàm ph ắc đặt tên namespaces ặt tên namespaces ương thức ng th c ức
Đặt tên hàm/phương thức theo kiểu Động từ + Đối tượng (verbobject):
public void ShowDialog()
Trang 20Tránh khai báo kiểu dữ liệu dạng "namespace"[".subnamespace.[ ]"]."kiểu dữ liệu" bằng cách sử dụng từ khóa using:
3.18 Tránh đ hàm tr v giá tr boolean trong m nh đ đi u ki n, hãy đ t m t ểu dữ liệu ảng qui tắc control prefix Name ề giá trị boolean trong mệnh đề điều kiện, hãy đặt một ị boolean trong mệnh đề điều kiện, hãy đặt một ệu ề giá trị boolean trong mệnh đề điều kiện, hãy đặt một ề giá trị boolean trong mệnh đề điều kiện, hãy đặt một ệu ặt tên namespaces ộc tính
bi n c c b và ki m tra nó vd : ến ục ộc tính ểu dữ liệu
Trang 21//Đúng
bool ok = IsEverythingOk();
if(ok)
{}
3.19 Luôn s d ng m ng b t đ u t 0; ử dụng mảng bắt đầu từ 0; ục ảng qui tắc control prefix Name ắc đặt tên namespaces ầu từ 0; ừa Attribute
Trong tập hợp có chỉ mục(index), chỉ mục bắt đầu từ không.
3.20 Luôn luôn kh i t o m ng reference type b ng vòng l p for ởi tạo mảng reference type bẳng vòng lặp for ạt tên cho trường Static ảng qui tắc control prefix Name ẳng vòng lặp for ặt tên namespaces
Public class MyClass()
{}
Const int ArrarSize = 100;
MyClass[] array = new MyClass[ArraySize];
For(int index = 0; index < array.Length; index++)
{
Array[index] = new MyClass[]
}
III QUI ƯỚC CODE FORMATS
1 Qui ước về Tab
Sử dụng tab chèn vào đầu dòng code để định hình, không sử dụng khoảng trắng để thay thế tab Số lượng tab chèn vào đầu mỗi dòng code không nên quá 4
2 Qui ước về Block code
Các Block code cùng cấp phải trong cùng 1 tab
3 Qui ước Khoảng cách
Nên đặt khoảng cách sau dấu phẩy hoặc chấm phẩy