Các lớp này sẽ giao tiếp với nhau thông qua các dịch vụ services mà mỗi lớp cung cấp để tạo nên ứng dụng, lớp này cũng không cần biết bên trong lớp kia làm gì mà chỉ cần biết lớp kia cu
Trang 1BÁO CÁO LẬP TRÌNH WINDOW
Mô hình 3 lớp và ứng dụng
TÓM TẮT
Khi người lập trình mới tiếp xúc với Windows Form và ADO.NET, việc lập trình bắt đầu trở lên phức tạp khi dự án lớn dần Bởi vậy để dễ quản lý các thành phần của hệ thống, cũng như không bị ảnh hưởng bởi các thay đổi, người ta hay nhóm các thành phần
có cùng chức năng lại với nhau và phân chia trách nhiệm cho từng nhóm để công việc không bị chồng chéo và ảnh hưởng lẫn nhau Một trong những mô hình lập trình như vậy đó là Mô hình 3 lớp (Three Layers)
Mô hình 3 lớp được cấu thành từ: Presentation Layers, Business Layers, và Data Layers Các lớp này sẽ giao tiếp với nhau thông qua các dịch vụ (services) mà mỗi lớp
cung cấp để tạo nên ứng dụng, lớp này cũng không cần biết bên trong lớp kia làm gì mà chỉ cần biết lớp kia cung cấp dịch vụ gì cho mình và sử dụng nó mà thôi
Báo cáo này không tham vọng trình bày lại chi tiết mô hình thiết kế ứng dụng 3 lớp
mà chỉ tóm tắt ngắn gọn lại những điểm chính của nó, thông tin được tham khảo từ nhiều nguồn khác nhau Phần tiếp theo, báo cáo sẽ thiết kế một ứng dụng Quản lý sinh viên dựa trên mô hình 3 lớp và một số chức năng nâng cao như Help, Report (Crystal report) Cuối cùng, là một số hướng phát triển tiếp theo của ứng dụng
Trang 2MỤC LỤC
TÓM TẮT
I Giới thiệu mô hình 3 lớp 1
1.1 Presentation Layer 2
1.2 Business Logic Layer 5
1.3.Data Access Layer 8
II Xây dựng chương trình Quản lý Sinh Viên 9
2.1 Thiết kế cơ sở dữ liệu 9
2.2 Xây dựng chương trình theo mô hình 3 lớp 10
2.2.1 GUI 10
2.2.2 DAO 19
2.2.3 DTO 22
2.2.4 Global 24
2.2.5 BUS 26
2.3 Một số tín năng nâng cao 28
2.3.1 Help 28
2.3.2 Report 30
III Một số hướng phát triển ứng dụng 39
Trang 3Page 1
I Giới thiệu mô hình 3 lớp
Mô hình 3 lớp được cấu thành từ: Presentation Layers, Business Layers, và Data Layers
Các lớp này sẽ giao tiếp với nhau thông qua các dịch vụ (services) mà mỗi lớp cung cấp để tạo nên ứng dụng, lớp này cũng không cần biết bên trong lớp kia làm gì mà chỉ cần biết lớp kia cung cấp dịch vụ gì cho mình và sử dụng nó mà thôi
Hình 1 Mô hình 3 lớp
Trang 4Hình 2 Các thành phần chi tiết của mô hình 3 lớp
1 Presentation Layer (GUI – Graphic User Interface)
Lớp này làm nhiệm vụ giao tiếp với người dùng cuối để thu thập dữ liệu và hiển thị kết quả/dữ liệu thông qua các thành phần trong giao diện người sử dụng Lớp này sẽ
sử dụng các dịch vụ do lớp Business Logic cung cấp Trong NET thì bạn có thể
dùng Windows Forms, ASP.NET hay Mobile Forms để hiện thực lớp này
Trong lớp này có 2 thành phần chính là User Interface Components và User Interface Process Components
Trang 5Page 3
Hình 3 Presentation Component Layer
Hình 4 User interface design
UI Components: là những phần tử chịu trách nhiệm thu thập và hiển thị thông tin
cho người dùng cuối Trong ASP.NET thì những thành phần này có thể là các TextBox, các Button, DataGrid…
Trang 6Hình 5 User Process Component design
UI Process Components: là thành phần chịu trách nhiệm quản lý các qui trình
chuyển đổi giữa các UI Components Ví dụ chịu trách nhiệm quản lý các màn hình nhập dữ liệu trong một loạt các thao tác định trước như các bước trong một Wizard…
Trang 72 Business Logic Layer (BUS)
Lớp này thực hiện các nghiệp vụ chính của hệ thống, sử dụng các dịch vụ do
lớp Data Access cung cấp, và cung cấp các dịch vụ cho lớp Presentation Lớp này cũng
có thể sử dụng các dịch vụ của các nhà cung cấp thứ 3 để thực hiện công việc của mình
Trong lớp này có các thành phần chính là Business Components, Business Entities và Service Interface
Trang 8Hình 7 Business Component Layer
Service Interface: là giao diện lập trình mà lớp này cung cấp cho lớpPresentation sử dụng Lớp Presentation chỉ cần biết các dịch vụ thông qua giao diện
này mà không cần phải quan tâm đến bên trong lớp này được hiện thực như thế nào
Business Entities: là những thực thể mô tả những đối tượng thông tin mà hệ thống
xử lý Các Business Entities này cũng được dùng để trao đổi thông tin giữa
lớp Presentation và lớp Data Layers
Business Components: là những thành phần chính thực hiện các dịch vụ
mà Service Interface cung cấp, chịu trách nhiệm kiểm tra các ràng buộc logic (constraints),
các qui tắc nghiệp vụ (Business Rules), sử dụng các dịch vụ bên ngoài khác để thực hiện các yêu cầu của ứng dụng
Trang 9Page 7 Hình 8 Business components
Hình 9 An orchestrated business process
Trang 103 Data Layer (DAO –Data Access Object hoặc DAL- Data Access Layer)
Lớp này thực hiện các nghiệp vụ liên quan đến lưu trữ và truy xuất dữ liệu của ứng dụng Thường lớp này sẽ sử dụng các dịch vụ của các hệ quản trị cơ sở dữ liệu như SQL Server, Oracle,… để thực hiện nhiệm vụ của mình Trong lớp này có các thành phần chính
là Data Access Logic, Data Sources, Servive Agents)
Hình 10 Data Access Component Layers
Data Access Logic Components (DAL) là thành phần chính chịu trách nhiệm lưu
trữ vào và truy xuất dữ liệu từ các nguồn dữ liệu – Data Sources như RDMBS, XML, File
systems… Trong NET Các DAL này thường được hiện thực bằng cách sử dụng thư viện
ADO.NET để giao tiếp với các hệ cơ sở dữ liệu hoặc sử dụng các O/R Mapping Frameworks
để thực hiện việc ánh xạ các đối tượng trong bộ nhớ thành dữ liệu lưu trữ trong CSDL Chúng ta sẽ tìm hiểu các thư viện O/R Mapping này trong một bài viết khác
Trang 11Page 9
Hình 11 Data access logic components
Service Agents: là những thành phần trợ giúp việc truy xuất các dịch vụ bên ngoài
một cách dễ dàng và đơn giản như truy xuất các dịch vụ nội tại
Data Transfer Object (DTO)
Giữa các layer luôn luôn có sự trao đổi dữ liệu (data) với nhau, việc trao đổi dữ liệu
thông qua DTO như hình phía dưới đây
II Chương trình Quản lý Sinh viên
Chương trình Quản lý Sinh viên là một chương trình nhỏ mô phỏng trực quan một
số thao tác quản lý cơ bản của một phần mềm quản lý bao gồm các chức năng:
- Hiển thị thông tin:
o Hiển thị toàn bộ thông tin
o Hiển thị thông tin theo yêu cầu (lọc theo điều kiện)
- Thêm các thông tin mới như Điểm, Sinh Viên, Môn học
- Cập nhật dữ liệu
- Tạo báo cáo (Crystal report)
- Hỗ trợ người dùng (Help)
Chương trình sử dụng ngôn ngữ VB.Net, Microsoft SQL Server 2008 Express x64
1 Thiết kế cơ sở dữ liệu QLSV
Chương trình sử dụng cơ sở dữ liệu QLSV với các bảng:
Trang 12 MONHOC(MSMonHoc, TenMonHoc, SOTINCHI, TINHCHAT)
SV(MaSV, HOTEN, NGAYSINH, LOP),
DIEM(MaSV, MSMonHoc, DIEMTHI)
Cấu trúc cơ sở dữ liệu như hình dưới
Hình 12 QLSV database
2 Xây dựng chương trình theo mô hình 3 lớp
2.1 Presentation Layer (GUI)
- Lớp Presentation được thiết kế với các form như hình dưới
Trang 13Page 11
Hình 13 Presentation form
- Thư mục Add bao gồm các form cung cấp các GUI phục vụ việc thêm
các đối tượng vào cơ sở dữ liệu, cụ thể:
o frmAddMark: Thêm điểm mới
Hình 14 Add new mark
Trang 14o frmAddStudent: Thêm sinh viên mới
Hình 15 Add new student
o frmAddSubject: Thêm môn học mới
Hình 16 Add new subject
Trang 15Page 13
- Thư mục Search bao gồm các form cung cấp GUI phục vụ công việc tìm
kiếm dữ liệu, cụ thể:
o frmAdvanceSearchStudent: Tìm kiếm sinh viên
Hình 17 Tìm kiếm sinh viên
o frmAdvanceSearchMark: Tìm kiếm điểm
Hình 18 Tìm kiếm điểm
Trang 16- Thư mục Update bao gồm các form cung cấp GUI phục vụ quá trình update
dữ liệu, cụ thể:
o frmUpdateMark: Cập nhật điểm
Hình 19 Cập nhật điểm
o frmUpdateStudent: Cập nhật thông tin sinh viên
Hình 20 Cập nhật thông tin sinh viên
Trang 17Page 15
o frmUpdateSubject: Cập nhật môn học
Hình 21 Cập nhật môn học
- Các form còn lại cung cấp GUI phục vụ một số công việc khác, cụ thể như sau:
o frmAbout: Giới thiệu chương trình
Trang 18Hình 22 Form About
o frmMainFrame: Frame chính của chương trình, là một MdiContainer
Hình 23 Main form
Trang 212.2 DAO
- Data Access Object cung cấp các phương thức giúp việc giao tiếp trực
tiếp với DataBase
- Trong layer này chỉ có một class Connection chứa các phương thức
phục vụ quá trình giao tiếp với Database như hình dưới đây
Trang 22Hình 29 Các phương thức của lớp Connection
- Các phương thức có chức năng cụ thể như sau:
o New: Tạo ra một instance mới của class
Khi tạo ra một instance mới của class Connection, thuộc tính stringConnection sẽ được gán một giá trị mới lấy từ file app.config thông quá keyword stringConnection File app.config có tác dụng nâng cao tính khả chuyển của ứng dụng, điều này có nghĩa là khi thay đổi client, người dùng chỉ cần cấu hình lại các thông số phù hợp với cơ sở
dữ liệu trong file này mà không cần source code và decompile lại ứng dụng Nội dung file app.config như sau:
o Connect: Tạo ra một kết nối đến CSDL thông qua một instance
của lớp SqlConnection và các tham số của stringConnection
Trang 23Page 21
o Disconnect: Đóng kết nối với CSDL
o ExecuteNonQuery: Phương thức này thực hiện các thao tác
với CSDL phục vụ các thao tác Thêm (insert), Sửa (Update, Xóa (Update) Sử dụng một Connection kết nối đến CSDL, sau
đó sử dụng một instance của lớp SqlCommand với tham số là một câu lệnh truy vấn SQL (SQL Query) và một instance của lớp SqlConnection Cuối cùng, phương thức sử dụng phương thức ExecuteNonQuery được định nghĩa sẵn trong lớp SqlCommand để thực hiện câu lệnh truy vấn SQL và đóng kết nối qua hàm Disconnect Phương thức này trả về số bản ghi bị tác động (Record effects)
Trang 24o ExecuteQuery: Tương tự như phương thức ExecuteNonQuery
tuy nhiên phương thức này trả về một DataSet phục vụ các câu lệnh truy vấn SQL (chủ yếu là select dữ liệu)
o Ngoài ra, class còn sử dụng một số phương thức Setter, Getter phục vụ quá trình truy xuất dữ liệu hiệu quả hơn
2.3 DTO
- Data Transfer Object cung cấp các đối tượng quản lý của bài toán cùng
các phương thức Setter, Getter của chúng
-
Hình 30 Các class của lớp (layer) DTO
- Cụ thể, các đối tượng có các thuộc tính sau:
o InfoMark: Chứa thông tin và các phương thức Setter, Getter
của đối tượng Điểm
Trang 25Page 23
Hình 31 Code lớp InfoMark
o InfoStudent: Chứa thông tin và các phương thức Setter, Getter
của đối tượng Sinh viên
Hình 32 Code lớp InfoStudent
Trang 26o InfoSubject: Chứa thông tin và các phương thức Setter, Getter
của đối tượng Môn học
Hình 33 Code lớp InfoSubject
2.4 Global
- Thư mục này không nằm trong mô hình 3 lớp, tuy nhiên chương trình
có sử dụng với mục đích tạo các biến, các hàm toàn cục (Global variables, Global Functions) phục vụ quá trình trao đổi dữ liệu giữa các
form nhanh chóng hơn
-
Hình 34 Global folder
- GlobalFunctions: Cung cấp các hàm dùng chung cho tất cả các form
Trang 27Page 25
o Close: Đóng các form theo các chế độ như Dispose hoặc Visible
= False
o OpenView: Mở các view form trong những trường hợp instance
của form đó đã bị dispose
Trang 28o RefreshData: Cập nhật lại dữ liệu khi có sự thay đổi dữ liệu trên
CSLD
2.5 BUS
- Lớp này cung cấp các phương thức phụ vụ quá trình thao tác với các
đối tượng Điểm, Sinh Viên, Môn Học
Trang 29Page 27
Hình 35 BUS folder
- Với từng đối tượng sẽ có các phương thức với nhiệm vụ khác nhau phục
vụ việc trao đổi dữ liệu với CSDL và người dùng
- Lớp MarkBus: Cung cấp các phương thức phục vụ các thao tác liên quan đến đối tượng Điểm
Hình 36 Các phương thức của lớp MarkBus
- Lớp StudentBus: Cung cấp các phương thức phục vụ các thao tác liên quan đến đối tượng Sinh Viên
Trang 30Hình 37 Các phương thức của lớp StudentBus
- Lớp SubjectBus: Cung cấp các phương thức phục vụ các thao tác liên quan đến đối tượng Môn học
Hình 38 Các phương thức của lớp SubjectBus
3 Một số tính năng nâng cao
3.1 Help
- Help là một tính năng nâng cao giúp người sử dụng dễ dàng nắm bắt cấu trúc chương trình, phần mềm cũng như nhanh chóng làm quen và tiếp cận, sử dụng hiệu quả phần mềm
Trang 31Page 29
- Hiện nay có khá nhiều phần mềm hỗ trợ tạo file help Trong báo cáo này sử dụng HTML Help WorkShop của Microsoft để tạo file *.chm chứa nội dung của file help
- Download HTML Help WorkShop tại địa chỉ:
Trang 32- Kết quả cuối cùng ta nhận được như hình dưới
Hình 40 Help demo
3.2 Report
- Báo cáo là phần không thể thiếu trong mọi công tác quản lý nhằm thống
kê, kiểm soát, điều chỉnh các tình huống cụ thể nào đó, hiện nay có rất nhiều phần mềm hỗ trợ tạo báo cáo với Vb.net Chương trình này sử dụng Crystal Report để tạo báo cáo với phiên bản 13.08
- Download Crystal Report tại địa chỉ: 7824
http://scn.sap.com/docs/DOC Lựa chọn phiên bản phù hợp, download và tiến hành cài đặt
- Việc cài đặt CR (Crystal Report) khác đơn giản, ta chỉ cần next và đợi
- Cấu hình project để có thể sử dụng CR bằng cách:
o Trong cửa sổ Solution Explorer double click vào My Project
Trang 33Page 31
o Chuyển sang tab compile –>Advanced Compile Options –> Trong combobox Target framework (all configurations) chọn Net Framework 4 như hình dưới đây
o Sau khi click Ok, chọn Yes sau đó tiến hành các bước tiếp theo khi trong Toolbox đã có như hình dưới
- Tạo báo cáo với CR
o Tạo 1 form có tên frmReport.vb (tùy chọn đặt tên)
o Kéo (drag) 1 object CrystalReportViewer vào form đã tạo.Object này đặt tên là viewer
Trang 34o Để viewer này có thể display các Crystal Document ta cần tạo
ra 1 CrystalReportDocument bằng cách chuột phải chọn Add –
> New Item –> Reporting –> Crystal Reports và đặt tên là reportDoc.rpt
Trang 35Page 33
o Tiếp theo, ta tiến hành thiết kế (design) report này Có rất nhiều các tạo và thiết kế report khác nhau, ở đây chọn Blank report để thiết kế tự do theo ý mình Ngoài ra có thể chọn theo các cách còn lại
o Ta có thể tự do thiết kế (design) report bằng cách chèn các image, Text, Line, Box Object Ngoài ra còn có các hàm dựng sẵn như ngày giờ, số bản ghi… Desiner có thể tự tìm hiểu bằng các chuột phải vào dùng design –> Insert –> Special Field
Trang 36o Phần quan trọng mà báo cáo này muốn giới thiệu ở đây là làm thế nào các để có thể tạo ra 1 report động với dữ liệu lấy từ các câu truy vấn SQL ( chi tiết sẽ trình bày ở phần dưới)
- Tạo DataSource cho Report
o Ta tạo ra 1 DataSet nhằm lưu dữ liệu truy vấn (query) từ SQL SV, dữ liệu này sẽ được cung cấp cho báo cáo
(reportDoc.rpt)
o Chuột phải vào project chọn Add –> New Item –> Tab Data –>
DataSet –> Name: reportDataSet.xsd
Trang 37Page 35
o Ta tạo ra 1 DataTable, đặt tên table và field giống như trong SQL Server (bảng cung cấp dữ liệu cho CR, với những report dùng dữ liệu nhiều bảng, đặt tên các field theo các field sẽ được select từ câu truy vấn SQL)
Ở đây, sẽ lấy bảng SV
o Tiếp theo, ta làm như hình phía dưới đây
Trang 38o Trong cửa sổ Field Explorer, ta làm như hình dưới (kéo thả các field vào Section 3(details))
o
o Cuối cùng bấm Save để lưu lại toàn bộ các file Chuyển sang bước tiếp theo
- Fill Data
Trang 39Page 37
o Chuyển sang chế độ code (F7) trong form đã thiết kế ở trên
o Do đây là demo nên ta sẽ viết code luôn trong phương thức (method) load của form này Mục đích là hiển thị toàn bộ dữ liệu của table SV kên báo cáo này
o Trước hết, ta cần hiểu các report này hoạt động như hình dưới
o Để report hoạt động cần tạo ra 1 instance của reportDataset sau
đó đổ dữ liệu vào dataset này, tiếp theo cần tạo ra 1 instance của reportDoc và lấy nguồn dữ liệu từ dataset phía trên Cuối cùng gắn reportDoc này vào viewer
o Để dễ dàng hơn, ta có thể xem minh họa bằng code phía dưới
o Để thay đổi điều kiện hiển thi dữ liệu cho báo cáo, chỉ cần thay đổi cấu trúc câu lệnh SQL với điều kiện nào đó Tất nhiên số return field phải tương ứng với số field trong dataset
o Cuối cùng, nhấm F5 để chạy chương trình và sẽ nhận được lỗi như hình dưới