1. Trang chủ
  2. » Công Nghệ Thông Tin

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

41 4,1K 29
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 41
Dung lượng 743,89 KB

Nội dung

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

Trang 1

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

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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 6

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

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:

Trang 7

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

Trang 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ụ:

Không viết : 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 == true) == true) == true //Sai

while (condition) // Đúng

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ệ:

Trang 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

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

// read from file

} catch (FileIOException ex) {

Trang 10

// read from file

// 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

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

Trang 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ẽ

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;

Trang 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)

Trang 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:

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

// Format a message and display

string fullMessage = "Hello " + name;

DateTime currentTime = DateTime.Now;

string message = fullMessage + ", the time is : " + currentTime.ToShortTimeString();

MessageBox.Show ( message );

Trang 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();

Trang 15

III CHUẨN VIẾT CODE TRONG SQL SERVER

1 Chuẩn đặt tên trong SQL SERVER

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:

- 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

Trang 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

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

- 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ụ:

Trang 17

CustomersID

8 Khóa ngoại

- Tên khóa ngoại được viết theo cấu trúc:

Tên bảng được tham chiếu+khóa chính

9 Ràng buộc Default và ràng buộc Check

- Tên ràng buộc Default có tiền tố “DEF”+ tên cột

- Tên ràng buộc check có tiền tố “CHK” + tên cột

2 Chuẩn viết mã nguồn trong SQL Server

1 Code cần dễ đọc và có khuôn khổ rõ ràng

- Viết chú thích trong thủ tục, trigger và các khối lệnh SQL bất cứ khi nào có vấn đề không rành mạch Điều này giúp các lập trình viên khác có thể hiểu được code của bạn

- Luôn sử dụng Tab để thụt đầu dòng khi cần thiết giúp việc đọc mã nguồn được dễ dàng

- Luôn thống nhất trong việc sử dụng chữ in hoa và in thường trong việc đặt tên cho đối tượng và khi sử dụng tên đó trong một thủ tục, trigger,…

Ví dụ: Khi bạn tạo một bảng với tên “MyTable” khi viết trong câu select bạn nên viết : SELECT * FROM MyTable

- Không dùng số của cột trong mệnh đề ORDER Sẽ khiến code khó hiểu

sử dụng để xử lý cả điều kiện Join và dữ liệu lọc Ví dụ 1 cho kiểu join ANSI, ví dụ

2 cho kiểu join cũ hơn

Trang 18

SELECT a.au_id, t.title

FROM titles t, authors a, titleauthor ta

WHERE

a.au_id = ta.au_id AND

ta.title_id = t.title_id AND

t.title LIKE '%Computer%'

- Để câu lệnh SQL dễ đọc viết mỗi mệnh đề trên một dòng mới và thụt đầu dòng nếu cần thiết

Ví dụ:

SELECT title_id, title

FROM titles

WHERE title LIKE '%Computer%' AND

title LIKE '%cook%'

- Không sử dụng “Go to” hoặc hạn chế tới mức tối thiểu vì dùng nhiều gây khó đọc

và khó hiểu

- Luôn viết tên cột cần insert trong câu lệnh INSERT để tránh sai sót khi có sự thay đổi cấu trúc của bảng

3 Kiểu dữ liệu

- Sử dụng kiểu dữ liệu CHAR cho một cột chỉ khi cột đó không thể null

- Sử dụng kiểu dữ liệu Unicode NCHAR, NVARCHAR hoặc NTEXT nếu cơ sở dữ liệu của bạn không chỉ lưu trữ các ký tự tiếng Anh Chỉ sử dụng kiểu dữ liệu Unicode khi thực sự cần thiết vì nó chiếm gấp hai lần không gian không bộ nhớ so với kiểu dữ liệu không phải Unicode

- Cố gắng không dủng kiểu dữ liệu TEXT và NTEXT để lưu một khối lượng lớn dữ liệu văn bản

4 Thủ tục

- Không gọi hàm liên tục trong một thủ tục, trigger, một hàm hay một lô (batches) khác Ví dụ bạn cần lấy chiều dài của một biến kiểu string tại nhiều nơi trong thủ tục Thay vì gọi hàm LEN nhiều lần bạn gọi hàm đó một lần duy nhất và lưu kết quả vào một biến cho lần sau sử dụng

Trang 19

- Nếu thủ tục của bạn luôn trả về một tập kết quả là hàng đơn nên xem xét tới việc

sử dụng tham số OUTPUT để trả về tập kết quả đó thay vì sử dụng câu lệnh SELECT

- Không đặt tên thủ tục với tiền tố “SP_”, tên này giành riêng cho thủ tục hệ thống

5 Các cân nhắc khi viết lệnh(Performance considerations)

- Không dùng “SELECT *” trong câu truy vấn mà viết chính xác tên cột bạn cần lấy

ra sau câu SELECT

- Tránh sử dụng bảng tạm hoặc sử dụng ở mức tối thiểu

- Tránh sử dụng ký tự đại diện tại đầu của một từ khi tìm kiếm với từ khóa như LIKE

- Hạn chế sử dụng toán tử không bằng (<> và NOT)

- Sử dụng bảng được tạo ra bởi một câu truy vấn như truy vấn con bất cứ khi nào có thể Chúng ta sẽ xem xét hai ví dụ sau:

ORDER BY Salary Desc)

Sẽ chạy chậm hơn ví dụ 2 sau:

- Thực hiện kiểm tra toàn vẹn tham chiếu và kiểm tra tính hợp lệ của dữ liệu nên sử dụng các ràng buộc (constraint) như khóa ngoại hay ràng buộc “check” thay vì dùng trigger

- Chỉ dùng trigger khi bạn chắc rằng không thể sử dụng được bằng ràng buộc Sử dụng ràng buộc sẽ tiết kiệm thời gian và bạn không cần viết code để kiểm tra

Trang 20

IV CHUẨN VIẾT CODE TRONG ORACLE PL/SQL

1 Chuẩn đặt tên trong ORACLE PL/SQL

1 Quy tắc đặt tên gói (Naming package)

- Tên của một gói theo cấu trúc sau:

Tên khóa: APPLICATION_PK

b Quy tắc đặt tên khóa ngoại

Trang 21

Tên khóa ngoại bao gồm tên viết tắt (là các chữ cái đầu tiên của tên bảng và chỉ gồm 4

ký tự) của 2 bảng và theo sau là hậu tố “_FK” Tên hai bảng theo thứ tự bảng tham chiếu, bảng chứa khóa ngoại Giữa các chữ có dấu gạch dưới

Ví dụ:

Tên bảng tham chiếu: APPLICATION

Tên bảng chứa khóa ngoại: FUNCTION

Tên khóa ngoại: APPL_FUNC_FK

7 Quy tắc đặt tên một số đối tượng khác

- Ràng buộc check: tên_CHK

- View : tên_V

- Sequences: tên_SEQ

8 Quy tắc đặt tên biến

- Quy tắc đặt tên con trỏ

+ Với con trỏ chỉ đọc ta thêm tiền tố “cr_”

+ Với con trỏ có thể cập nhật ta thêm tiền tố “cu_”

- Biến cục bộ bắt đầu với tiền tố “l”

- Biến toàn cục và hằng số lần lượt được thêm tiền tố “g”, “c”

- Ngoại lệ (Exception): e_tên ngoại lệ

- Tham số đầu vào: i_tên tham số

- Tham số đầu ra: o_tên tham số

- Tham số vào ra(In/out parameter): io_tên tham số

9 Quy tắc đặt tên trigger

Tên trigger được viết bằng tiếng Anh gồm tên bảng + tên viết tắt loại trigger + hậu tố

Ngày đăng: 30/01/2013, 14:43

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w