Control type Prefix Example.
Trang 1CHU N VI T CODE VÀ THI T K GIAO DI N TRONG C# Ẩ Ế Ế Ế Ệ
(B n tóm t t)ả ắ
I QUY Đ NH Đ T TÊN Ị Ặ
I.1 Tên bi n ế
- Ki u Camelể
I.2 Tên h ng s ằ ố
- S d ng Uppercaseử ụ
- G ch n i gi a các tạ ố ữ ừ
I.3 Tên ki u Enum ể
- Tên ki u Pascalể
- Không ti n, h u tề ậ ố
I.4 Tham số
- Tên ki m Camelể
I.5 Tên thu c tính ộ
- Tên ki u Pascalể
I.6 Tên ph ươ ng th c ứ
- Tên ki u Pascalể
I.7 S ki n ự ệ
- Ki u Pascalể
- Thường có h u t : EventHandlerậ ố
I.8 Tên l p ớ
- Tên ki u Pascalể
- Không s d ng g ch chânử ụ ạ
Trang 2I.9 Giao di n ệ
- Tên ki u Pascalể
- B t đ u b ng ti n t “I”ắ ầ ằ ề ố
I.10 Không gian tên
- Cú pháp: [Tên công ty].[Tên Công ngh ][.Đ c tr ng][.Thi t k ]ệ ặ ư ế ế
Ví d : SDGVN.Web.Utilityụ SDGVN.Web.ModuleBase
I.11 Tên ti n t c a các đi u khi n ề ố ủ ề ể
Combo box, drop-down list box cbo cboEnglish
Control (used within procedures
when the specific type is unknown)
Trang 3Control type Prefix Example
Trang 4II THI T K GIAO DI N Ế Ế Ệ
II.1 Thi t k form ế ế
Thi t l p Option Layout Settings c a Form nh sau:ế ậ ủ ư
Quy đ nh kích thị ước Form
Luôn c g ng đ m b o t l 4x3: Form r ng 4 thì cao 3 đ đ m b o cân x ngố ắ ả ả ỷ ệ ộ ể ả ả ứ
v i màn hình.ớ
Quy đ nh kích thị ước Control
o Chi u cao: s d ng chi u cao m c đ nh s n c a Control.ề ử ụ ề ặ ị ẵ ủ
Trường h p đ c bi t:ợ ặ ệ
TextBox multi-lines: đ m b o không b che 1 ph n c a dòngả ả ị ầ ủ
Button có image: đ m b o hi n th v a đ image 16x16 pixelả ả ể ị ừ ủ
o Đ r ng: tùy đ r ng c a textộ ộ ộ ộ ủ
Đ m b o nguyên t c các TexBox, Combo trên cùng m t Form có đả ả ắ ộ ộ
r ng th ng nh t ộ ố ấ
Đ m b o nguyên t c các Button trên t t c các Form có đ r ng th ngả ả ắ ấ ả ộ ộ ố
nh t, text trên Button không nên vấ ượt quá 2 t ừ
N u text trên Button g m 2 t tr xu ng: b t bu c s d ng đ r ngế ồ ừ ở ố ắ ộ ử ụ ộ ộ
m c đ nh (75).ặ ị
o Đ i v i nh ng trố ớ ữ ường có đ r ng c đ nh ho c ít khi thay đ i (ví d nhộ ộ ố ị ặ ổ ụ ư
trường có ki u d li u là Date thì đ r ng là c đ nh là 10 ký t ), tuân thể ữ ệ ộ ộ ố ị ự ủ theo quy đ nh sau:ị
Trang 5 Đ r ng control độ ộ ược binding v i trớ ường này ch đỉ ược phép r ng độ ủ
đ hi n th h t thông tin trong đó.ể ệ ị ế
Không được đ đ r ng control vể ộ ộ ượt quá đ r ng c a trộ ộ ủ ường
o L u ý: Label đ t AutoSize=FALSE, TextBox đ t AutoSize=TRUEư ặ ặ
Quy đ nh kho ng cách gi a các Controlị ả ữ
o Các Control cách mép Form 01 ô grid (c 4 phía).ả
o TextBox, ComboBox cách Label dài nh t 01 ô gridấ
o Các Control cách nhau 01 ô grid c chi u d c và ngang.ả ề ọ
Trang 6Riêng tr ườ ng h p s d ng GroupBox ợ ử ụ có caption thì các Control bên trong
GroupBox cách mép trên c a GroupBox 02 ô grid GroupBox không có caption ủ kho ng cách v n là 1 ô grid ả ẫ
Trang 7 Di n m o Controlệ ạ
o Font & Color: s d ng thi t l p m c đ nh Ch thay đ i khi yêu c u thi t kử ụ ế ậ ặ ị ỉ ổ ầ ế ế
ch rõ.ỉ
o Hot track: thi t l p Hot track cho Button, Combo và DropDown.ế ậ
o Căn l Text trên Control:ề
Chi u ngang (HAlign):ề
• Ch căn tráiữ
• S căn ph iố ả
• Riêng v i Button thì luôn căn gi a.ớ ữ
Chi u d c (VAlign): căn gi a (Middle)ề ọ ữ
Dóng Control
o Label: dóng trái
o Textbox, Combo: dóng đ u hai bênề
Tab Order:
o Ph i thi t l p Tab Order trên m i giao di n (Form, Control, …) theo nguyênả ế ậ ọ ệ
t c: t trái sang ph i, t trên xu ng dắ ừ ả ừ ố ưới
o Yêu c u b t bu c thi t l p TabOrder theo đúng th t cho m i Control trênầ ắ ộ ế ậ ứ ự ọ Form, k c Control không focus vào để ả ược nh Label, GroupBox, hay Controlư invisible L u ý tuân th tuy t đ i quy đ nh này vì nó ph c v nhi u m c đíchư ủ ệ ố ị ụ ụ ề ụ quan tr ng nh t o shortcut key, valid required data, …ọ ư ạ
Anchor & Dock: ph i thi t l p Anchor và Dock cho Control trên các Form, Containerả ế ậ không c đ nh kích thố ị ước (Sizable)
V i thông tin yêu c u ngớ ầ ười dùng không dược b tr ng mà b t bu c nh pỏ ố ắ ộ ậ
(AllowNull = FALSE) thì Label cho thông tin đó ph i s d ng ký hi u “(*)” cu iả ử ụ ệ ở ố
và thi t l p shortcut key.ế ậ
II.2 Quy đ nh khi t o MessageBox ị ạ
- Caption: s d ng ử ụ Application.ProductName
- Icon:
• MessageBoxIcon.Exclamation: dùng cho các trường h p sauợ
o C nh báo l iả ỗ
o C nh báo xóa d li uả ữ ệ
o C nh báo nh p thi u, nh p sai d li uả ậ ế ậ ữ ệ
• MessageBoxIcon.Information: dùng cho các thông báo không có tính ch tấ
c nh báo, ví d K t qu Import, Thông tin v CSDL, … ả ụ ế ả ề
Trang 8- N i dung Message: ộ không được phép vi t tr c ti p n i dung message mà ph i dùngế ự ế ộ ả Resource (s s ng hàm String.Format đ truy n tham s cho Resource n u c n).ử ụ ể ề ố ế ầ
II.3 Quy t c vi t mô t (comment) cho code ắ ế ả
S d ng ti ng Vi t có d u (Unicode) đ vi t comment ử ụ ế ệ ấ ể ế
Comment cho Module, Class
M i Module, Class c n có mô t ng n v m c đích c a Module hay Class đó N i dungỗ ầ ả ắ ề ụ ủ ộ
g m:ồ
M c đích: Module hay Class th c hi n nh ng công vi c gì.ụ ự ệ ữ ệ
Ngườ ậi l p: Ngườ ại t o Module hay Class
Nh ng bi n/hàm quan tr ng (không b t bu c): Li t kê tên các bi n và hàm quan tr ngữ ế ọ ắ ộ ệ ế ọ trong Module/Class
Comment cho Method và Event
- T t c các Method và Event ph i có comment.ấ ả ả
- Comment cho Method/Event g m hai ph n:ồ ầ
o Ph n 1 (ầ không b t bu c ắ ộ ): mô t m c đích và di n gi i ng n g n ý nghĩaả ụ ễ ả ắ ọ các tham s đ u vào, đ u ra ố ầ ầ
L u ý: mô t Method đó làm gì (What), không mô t Method đó th c hi nư ả ả ự ệ
th nào (How).ế
T VC# 2005 tr đi, Microsoft cung c p s n m t macro dành cho vi cừ ở ấ ẵ ộ ệ
vi t comment m c đích S d ng nh sau: gõ liên ti p 3 d u nháy đ n (‘)ế ụ ử ụ ư ế ấ ơ trên đ u m i Method.ầ ỗ
L p trình viên có th không c n vi t ph n mô t m c đích này v i cácậ ể ầ ế ầ ả ụ ớ Method/Event đ n gi n, không ph c t p.ơ ả ứ ạ
o Ph n 2 (ầ b t bu c ắ ộ ): ghi thông tin v history t o và s a Method/Event đóề ạ ử (ngườ ại t o/ngày t o, ngạ ườ ửi s a/ngày s a) ử Thông tin này b t bu c ph i cóắ ộ ả
v i m i Method/Event.ớ ọ
- M u comment cho Method/Event ẫ đ n gi n ơ ả :
// Created by (ngườ ại t o) – (ngày/tháng/năm t o): di n gi i ng n g n m c đích ạ ễ ả ắ ọ ụ
// Modified by (ngườ ửi s a 1) – (ngày/tháng/năm s a 1): di n gi i vi c s a 1ử ễ ả ệ ử
// Modified by (ngườ ửi s a 2) – (ngày/tháng/năm s a 2): di n gi i vi c s a 2ử ễ ả ệ ử
//…
Trang 9// Modified by (ngườ ửi s a n) – (ngày/tháng/năm s a n): di n gi i vi c s a nử ễ ả ệ ử
Ví dụ
// Created by lhhoa - 20/02/2008: hàm l y kho ng th i gian là ngày đ u và ngày cu i c aấ ả ờ ầ ố ủ tháng trước
// Modified by nvkieu - 25/02/2008: s a l i gì đóử ỗ
// Modified by nqhoang - 27/02/3008: b sung gì đóổ
privatevoid GetDateLastMonth(fromDate datetime, toDate datetime, currentMonth int, currentYear int)
{
if (currentMonth == 1)
{
fromDate = DateSerial(currentYear - 1, 12, 1);
toDate = DateSerial(currentYear - 1, 12, DaysInMonth(currentYear - 1, 12));
}
else
{
fromDate = DateSerial(currentYear, currentMonth - 1, 1);
toDate = DateSerial(currentYear, currentMonth - 1, DaysInMonth(currentYear,
currentMonth - 1));
}
………
}
- M u comment cho Method/Event ẫ ph c t p ứ ạ :
/// <summary>
/// Di n gi i m c đíchễ ả ụ
Trang 10///<param name="Tham s 1">Di n gi i cho Tham s 1</param>ố ễ ả ố
///<param name="Tham s 2">Di n gi i cho Tham s 2</param>ố ễ ả ố
/// …
/// <param name="Tham s n">Di n gi i cho Tham s n</param>ố ễ ả ố
/// <remarks>Nh n xét (n u có)</remarks>ậ ế
/// Created by (ngườ ại t o) – (ngày/tháng/năm t o)ạ
/// Modified by (ngườ ửi s a 1) – (ngày/tháng/năm s a 1): di n gi i vi c s a 1ử ễ ả ệ ử
/// Modified by (ngườ ửi s a 2) – (ngày/tháng/năm s a 2): di n gi i vi c s a 2ử ễ ả ệ ử
/// …
/// Modified by (ngườ ửi s a n) – (ngày/tháng/năm s a n): di n gi i vi c s a nử ễ ả ệ ử
Ví d :ụ
/// <summary>
/// Hàm l y kho ng th i gian là ngày đ u và ngày cu i c a tháng trấ ả ờ ầ ố ủ ước
/// </summary>
/// <param name="fromDate">Ngày đ u tháng trầ ước</param>
/// <param name="toDate">Ngày cu i tháng trố ước</param>
/// <param name="currentMonth">Tháng hi n t iệ ạ </param>
/// <param name="currentYear">Năm hi n t iệ ạ </param>
/// <remarks></remarks>
/// Created by lhhoa - 20/02/2008
/// Modified by nvkieu - 25/02/2008: s a l i gì đóử ỗ
/// Modified by nqhoang - 27/02/3008: b sung gì đóổ
privatevoid GetDateLastMonth(fromDate datetime, toDate datetime, currentMonth int,
Trang 11currentYear int)
{
if (currentMonth == 1)
{
fromDate = DateSerial(currentYear - 1, 12, 1);
toDate = DateSerial(currentYear - 1, 12, DaysInMonth(currentYear - 1, 12));
}
else
{
fromDate = DateSerial(currentYear, currentMonth - 1, 1);
toDate = DateSerial(currentYear, currentMonth - 1, DaysInMonth(currentYear, currentMonth - 1));
}
………
}
Comment cho đo n Code ạ
- Nh ng đo n code ph c t p c n có comment g n li n bên trên đ chú gi i.ữ ạ ứ ạ ầ ắ ề ể ả
- Nh ng đo n code đữ ạ ượ ửc s a đ i (modified), b sung (added) ho c rem (removed)ổ ổ ặ
b i ngở ười không ph i tác gi c n có comment rõ ngay t i n i s a đ i, b sung:ả ả ầ ạ ơ ử ổ ổ
ng ườ ử i s a, ngày s a, m c đích ử ụ
- Comment cho đo n code áp d ng b t bu c v i các Base Form/Base Class/Baseạ ụ ắ ộ ớ Control
II.4 Quy t c phân nhóm (region) khi coding: ắ
Ph i s d ng Region phân nhóm code đ ti n cho vi c s a đ i, b o trì.ả ử ụ ể ệ ệ ử ổ ả
Phân nhóm code theo c u trúc nh sau: (theo th t b t bu c, nh ng không b t bu c cóấ ư ứ ự ắ ộ ư ắ ộ
đ t t c các region)ủ ấ ả
Trang 12Constructor
Property
Method/Function
Event
Tùy theo yêu c u c a các form, class và module, l p trình viên có th chia nh cácầ ủ ậ ể ỏ Region chính trên thành các sub-region VD: region Method/Function có th ch a cácể ứ region con sau:
Method/Function
Public Overridable (trường h p là base form/class)ợ Override (trường h p là derive form/class)ợ Private
Other
Trường h p form ho c class có s d ng các component đ c l p (Security, Document,ợ ặ ử ụ ộ ậ MassEmail,…) thì ph i t o các Region riêng cho t ng component, ch a toàn b codeả ạ ừ ứ ộ liên quan đ n vi c tế ệ ương tác v i các component đó.ớ
II.5 Quy đ nh b y l i khi coding ị ẫ ỗ
- B t bu c b y l i (s d ng ắ ộ ẫ ỗ ử ụ try … catch) trong t t c các ấ ả Event c a Form vàủ
Control trên Form
- Nghiêm c m s d ng cú pháp ấ ử ụ try … catch đ che d u l i (không x lý gì sau tể ấ ỗ ử ừ
khóa catch).
Trang 13Good!!!
II.6 Quy đ nh thi t k Dataset: ị ế ế
- Tên c a Dataset khi visual design đ t nh sau: ủ ặ ư “Dataset” + M c đích ụ VD:
DatasetDictionary, DatasetCAPayment, …
- S lố ượng DataTable trong m t Dataset: quy đ nh t ộ ị ừ 10 tr xu ng M i Dataset chở ố ỗ ỉ
được phép có t i đa 10 DataTable Khi thi t k ph i tách Dataset đ đ m b oố ế ế ả ể ả ả nguyên t c này N u m t Dataset có nhi u DataTable thì t c đ load/save d li uắ ế ộ ề ố ộ ữ ệ
s b nh hẽ ị ả ưởng nghiêm tr ng.ọ