Chuẩn viết code và thiết kế giao diện trong C#

pdf 13 trang phuongnguyen 2891
Bạn đang xem tài liệu "Chuẩn viết code và thiết kế giao diện trong C#", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfchuan_viet_code_va_thiet_ke_giao_dien_trong_c.pdf

Nội dung text: Chuẩn viết code và thiết kế giao diện trong C#

  1. CHUẨẾẾẾỆ 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 - Pascal BackColor - Camel backColor - Uppercase BACKCOLOR 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
  2. I.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 Control type Prefix Example Panel pnl pnlGroup Check box chk chkReadOnly Combo box, drop-down list box cbo cboEnglish Command button btn btnExit Common dialog dlg dlgFileOpen Control (used within procedures ctr ctrCurrent when the specific type is unknown) Data dat datBiblio Data-bound combo box cbo cboLanguage Data-bound grid grd grdQueryResult Data-bound list box lst lstJobType Repeater rpt drpLocation Date Time Picker dtp dtpPublished Form frm frmEntry Frame fra fraLanguage DataGridView dgv dgvPrices GridView grd grdProduct DataList dtl dtlOrders
  3. Control type Prefix Example Horizontal scroll bar hsb hsbVolume Image img imgIcon ImageList ils ilsAllIcons ImageButton ibt ibtNext HyperLink hpl hplHome LinkButton lbt lbtClick Label lbl lblHelpMessage List box lst lstPolicyCodes ListView lvw lvwHeadings Menu mnu mnuFileOpen Option button opt optGender Picture box pic picVGA Picture clip clp clpToolbar ProgressBar prg prgLoadFile RichTextBox rtf rtfReport Slider sld sldScale Spin spn spnPages StatusBar sta staDateTime Text Box txt txtLastName Timer tmr tmrAlarm Toolbar tlb tlbActions TreeView tre treOrganization UpDown upd updDirection Vertical scroll bar vsb vsbRate SqlDataSource sql sqlAccounts LinqDataSource linq linqCategories
  4. II. 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:
  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.
  6. Riê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.
  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,
  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 //
  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ì đó private void 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: /// /// Diễ n gi ả i m ụ c đích
  10. /// /// Di ễ n gi ả i cho Tham s ố 1 /// Di ễ n gi ả i cho Tham s ố 2 /// /// Di ễ n gi ả i cho Tham s ố n /// Nhậ n xét (n ế u có) /// 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ụ : /// /// Hàm lấ y kho ả ng th ờ i gian là ngày đ ầ u và ngày cu ố i c ủ a tháng tr ướ c. /// /// Ngày đầ u tháng tr ướ c /// Ngày cuố i tháng tr ướ c /// Tháng hiệ n t ạ i /// Năm hiệ n t ạ i /// /// 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ì đó private void GetDateLastMonth(fromDate datetime, toDate datetime, currentMonth int,
  11. 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)); } . } 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)
  12. Declaration Constructor 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).
  13. Bad!!! Good!!! 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.