HỆ THỐNG TÍCH HỢP ỨNG DỤNG DESKTOP VÀ WEB-BASED VỚI MÔ HÌNH 3 LỚP TRÊN.NET
HỆ THỐNG TÍCH HỢP ỨNG DỤNG DESKTOP VÀ WEB-BASED VỚI MƠ HÌNH LỚP TRÊN.NET Trung tâm Tin học-Trường ĐH Thủy Lợi NỘI DUNG Khái qt mơ hình triển khai phát triển ứng dụng .2 1.1 Sơ lược mơ hình lớp .2 1.2 Mơ hình thực tế mơ tả phát triển ứng dụng cụ thể 1.3 Mơ hình thực thể triển khai hệ thống đa người dùng Những người phát triển ứng dụng công việc cần làm 2.1 Tổng quan ứng dụng sử dụng cho việc trình diến (demo application) 2.2 Tìm hiểu sơ qua thành phần sử dụng độc lập DNN .6 2.3 Công cụ sinh mã (codesmith explorer) tùy biến 2.4 Xây dựng Projects phục vụ cho công việc 2.4 Mơ hình lập trình lớp 2.4.1 Mơ hình lớp đối tượng .7 2.4.2 Triển khai cụ thể Components lớp Bissiness logic 2.5 Xây dựng thành phần (components) cho lớp Data Access Layer (DAL) Việc sinh mã thực thành công 10 2.6 Hoàn thiện lớp triển khai (Bussiness Logic Layer-BLL) .10 Gắn kết thành phần vào Solution cho phát triển ứng dụng 11 Trải nghiệm mơ hình tích hợp ứng dụng Web-base Winform-based 12 4.1 Sự tích hợp 12 4.2 Sự đồng tương đồng modules lập trình 12 Kết luận .14 Hệ thống tích hợp ứng dụng Desktop Web-based với mơ hình lớp NET Khái qt mơ hình triển khai phát triển ứng dụng 1.1 Sơ lược mơ hình lớp Nếu người phát triển ứng dụng web với công nghệ NET hẳn bạn nghe nói đến DotNetNuke (DNN) mơ hình phát triển ứng dụng web đầy triển vọng Cũng tương tự, CSLA.NET cho mẫu hình phát triển ứng dụng tích hợp web-based windows-based Tuy nhiên, bạn nghĩ tự xây dựng mơ hình phát triển ứng dụng Desktop tích hợp với Web? Ý chúng tơi nói đến không sở liệu dùng chung mà có “components” chế chung cho phép “lai ghép” thành phần hai môi trường phát triển web win forms Dĩ nhiên việc phân lớp nói đến quy trình sinh mã (code generation) nhằm giảm nhẹ khối lượng lập trình, tiết kiệm nhân công thời gian Trong viết này, chúng tơi đề xuất giải pháp mà bạn thấy quy trình mơ hình ứng dụng để phát triển Portal web triển khai quy trình xây dựng ứng dụng đa người dùng desktop với sở liệu tập trung Chúng xin dẫn mô hình xây dựng ứng dụng DNN: 1.2 Mơ hình thực tế mô tả phát triển ứng dụng cụ thể Với mà mơ hình lớp thể hiện, xây dựng hệt thống phát triển ứng dụng tích hợp Web-based Desktop C# với CSDL tập trung hệ quản trị CSDL MS SQL server Lớp thể giao diện Các Thành phần Giao diện (Windows User Control) Lớp thành phần thực công việc Các Thành phần thực thi (Bussiness Components ) Lớp truy xuất/nhập liệu Lớp truy nhập liệu đa hình Mơ tả truy nhập liệu (Abstract Data Provider ) Lớp thực thi truy nhập liệu (Sql Data Provider) Các khối truy nhập liệu Các đặc trưng mơ hình lớp 1.3 Mơ hình thực thể triển khai hệ thống đa người dùng ` Lớp truy nhập liệu (DAL) Database Server Lớp Các thành phần thực thi (BLL) Các Thành phần Giao diện (UI) ` ` DAL BLL UI dùng Data Access Layer Bussiness Logic Layer User Interface Layer (Presentation) Truy vấn CSDL Lớp thực thi giao dịch Lớp giao diện người Vậy phải quan tâm đến vấn đề: Ứng dũng cung cấp cho người dùng cuối (lớp UI) Làm để xây dựng lớp (classes) mô tả thông tin BLL Bằng cách người phát triển trì BLL khơng phải lập trình lại mà DAL dựa thực thể CSDL khác (Sql, Access, Oracle ) Đặc trưng BLL DAL cho phép giảm bớt công việc lập trình việc sử dụng cơng cụ sinh mã (code generator) Xin có mách nước nhỏ: sử dụng tùy biến công cụ cho phép sản sinh hàng loạt đối tượng (tại BLL DAL) Và hiển nhiên tiết kiệm thời gian công sức (tới 25%) dành cho công việc phát triển ứng dụng 2 Những người phát triển ứng dụng công việc cần làm 2.1 Tổng quan ứng dụng sử dụng cho việc trình diến (demo application) Như công việc người phát triển (developer) Chúng ta xem mơ hình lớp cung cấp cho người phát triển ứng dụng Có lẽ nhiều chúng tơi bạn tưởng tượng Chúng tơi xin vào việc xây dựng ứng dụng cụ thể nhỏ với CSDL tìm hiểu cơng cụ mà áp dụng Chúng ta xem xét mơ hình CSDL nhỏ (tạm gọi SmallStore) mơ tả việc quản lý đơn giản thông tin việc bán hàng cho cửa hàng Trong phần chúng tơi lấy mơ hình Dotnetnuke làm hình mẫu đại diện cho mơ hình ứng dung lớp Mơ hình CSDL SmallStore Ghi chú: Hệ thống bao gồm thơng tin nhân viên, khách hàng, hóa đơn việc bán sản phẩm cửa hàng Các thơng tin truy xuất theo bảng, với điều kiện lọc theo quan hệ (Foreign key Contraints) Tại mối lớp mơ hình triển khai, đặc tả CSDL “truyền đạt” tận lớp Presentation Các đặc tả là: khóa chính, khóa ngoại, danh sách đối tượng, thao tác CSDL – thêm, sửa, xóa, tìm kiếm 2.2 Tìm hiểu sơ qua thành phần sử dụng độc lập DNN DotNetNuke.dll Thư viện thành phần Framework DotNetNuke Microsoft.ApplicationBlocks.Data.dll Thư việc hàm làm việc trực tiếp với CSDL DotNetNuke.SqlDataProvider.dll Thư viện sqlHelper dành cho việc truy nhập sở liệu MS SQL server DotNetNuke.Caching.BroadcastPollingCachingProvider.SQLDataProvider.dl l Thư viện phương thức quản lý lưu đệm (cache) dùng cho tối ưu hóa truy nhập CSDL với MS SQL server Với nhân tố trên, bước đầu bắt tay vào việc xây dựng thành phần ứng dụng Chúng tơi xin trình bày trình triển khai components theo thứ tự từ lên (từ lớp truy nhập liệu DAL) mơ hình đưa 2.3 Cơng cụ sinh mã (codesmith explorer) tùy biến Codesmith phần mềm, hay môi trường phát triển mẫu (template) dành cho việc sản sinh đoạn mã dựa tham số đưa vào CSDL xây dựng Có thể tìm thấy Codesmith tải theo liên kết: http://www.ericjsmith.net/codesmith/ CodeSmith Explorer ứng dụng nhỏ miễn phí CodeSmith Studio (bản thương mại – khơng miễn phí) CodeSmith Explorer cài đặt tích hợp sẵn mơi trường lập trình Visual Studio NET dạng Addon CodeSmith Explorer sử dụng templates để sinh mã cho việc lập trình Các mẫu dành cho phát triển module DNN download miễn phí liên kết: http://lucaslabs.net/blogs/mccullochs/archive/2004/02/15/487.aspx 2.4 Xây dựng Projects phục vụ cho công việc Hai Projects mà cần có để phát triển ứng dụng thể hình sau Component Project Chứa components: Controller class Info class DataProvider class SqlDataProvider Project Bao gồm SqlDataProvider classes Store Procedures 2.4 Mơ hình lập trình lớp 2.4.1 Mơ hình lớp đối tượng Chúng ta xem xét ví dụ việc tạo lớp để thao tác với đối tượng lớp nhân viên (ứng với bảng HT_NhanVien CSDL) Các components tạo có dạng thức sau Trong ví dụ này, phương thức lấy thông tin nhân viên theo khóa MaNhanVien sử dụng thấy đối tượng kiến trúc DNN Mơ hình đối tượng trình bày sơ đồ Controller Object Info Object DataProvider Object SQLDataProvider Object Store Procedure Controller Class Đối tượng điều khiển, dụng phương thức DataProvider để truy xuất liệu Info Class Lớp mô tả đối tượng lưu trữ thông tin DataProvider Class Lớp ảo (abstract) định nghĩa phương thức truy nhập liệu Lớp ảo cho phép phát triển độc lập mô tả truy nhập liệu SqlDataProvider Class Đối tượng truy nhập liệu thực Store Procedure Các thủ tục CSDL MSSQL server SqlDataProvider sử dụng 2.4.2 Triển khai cụ thể Components lớp Bissiness logic public class NhanVienController : DotNetNuke.Entities.Modules.ISearchable, DotNetNuke.Entities.Modules.IPortable { public NhanVienInfo Get(string maNhanVien) { return (NhanVienInfo)DotNetNuke.Common.Utilities.CBO.FillObject(DataProv ider.Instance().GetNhanVien(maNhanVien), typeof(NhanVienInfo)); } } public class NhanVienInfo { #region "Private Members" string _maNhanVien; string _ten; bool _gioiTinh; DateTime _ngaySinh; string _dienThoai; string _diaChi; string _maPB; double _heSoLuong; #endregion #region "Constructors" public NhanVienInfo() { } public NhanVienInfo(string maNhanVien, string ten , bool gioiTinh , DateTime ngaySinh , string dienThoai , string diaChi , string maPB , double heSoLuong) { this.MaNhanVien = maNhanVien; this.Ten = ten; this.GioiTinh = gioiTinh; this.NgaySinh = ngaySinh; this.DienThoai = dienThoai; this.DiaChi = diaChi; this.MaPB = maPB; this.HeSoLuong = heSoLuong; } #endregion } public abstract class DataProvider { public abstract IDataReader GetNhanVien(string maNhanVien); } public class SqlDataProvider : DataProvider public override IDataReader GetNhanVien(string maNhanVien) { return (IDataReader)SqlHelper.ExecuteReader(ConnectionString, DatabaseOwner + ObjectQualifier + "HT_NhanVienGet", maNhanVien); } } 2.5 Xây dựng thành phần (components) cho lớp Data Access Layer (DAL) Để cụ thể hóa, ta xem xét tạo phiên SqlDataProvider cho bảng CSDL Lúc ta hiểu bảng CSDL lớp đối tượng Chọn Bảng CSDL mà ta cần triển khai mơ hình SqlDataProvider Ghi chú: Có số lưu ý: Các bảng chọn sinh mã bắt buộc phải có trường khóa (Primary Key) bảng Khi phương thức SqlDataProvider sinh nhận biết tiêu chí thêm, sửa, xóa, cập nhật tìm kiếm Việc sinh mã thực thành cơng Đoạn mã chứa phuơng thức SqlDataProvider dành cho truy xuất thông tin Nhân viên, tương ứng với bảng NhanVien CSDL: #region "NhanVien Methods" public override IDataReader GetNhanVien(string maNhanVien) { return (IDataReader)SqlHelper.ExecuteReader(ConnectionString, DatabaseOwner + ObjectQualifi } public override IDataReader ListNhanVien() { return (IDataReader)SqlHelper.ExecuteReader(ConnectionString, DatabaseOwner + ObjectQualifi } public override int AddNhanVien(string ten, bool gioiTinh, DateTime ngaySinh, string dienThoai, { return int.Parse(SqlHelper.ExecuteScalar(ConnectionString, DatabaseOwner + ObjectQualifier + "HT_N } public override void UpdateNhanVien(string maNhanVien, string ten, bool gioiTinh, DateTime ngayS { SqlHelper.ExecuteNonQuery(ConnectionString, DatabaseOwner + ObjectQualifier + "HT_NhanVienU } public override void DeleteNhanVien(string maNhanVien) { SqlHelper.ExecuteNonQuery(ConnectionString, DatabaseOwner + ObjectQualifier + "HT_NhanVienD } #endregion 2.6 Hoàn thiện lớp triển khai (Bussiness Logic Layer-BLL) Công việc triển khai lớp BLL thực tương tự Chúng ta sử dụng code templates dùng Code Smith để sinh mã cho lớp BLL Các templates liệt kê đây: Controller template C# BLL Controller Class.cst Info template C# BLL Info Class.cst DataProvider template C# DataProvider.cst Chú ý DataProvider lớp ảo (abstract) nhằm tách rời lớp Bussiness khỏi thực thể CSDL cụ thể MS SQL (do SqlDataProvider đảm nhiệm) Việc “ảo hóa” truy nhập CSDL cho phép ta triển khai ứng dụng quản trị CSDL khác mà xây dựng lại hay biên dịch lại lớp Bussiness Ví dụ thể cho tư ta xây dựng OracleDataProvider độc lập (có thể thư viện dll mơ hình hóa giống SqlDataProvider) Sau gắn với DataProvider ảo thơng qua chế Reflection (tạo môt thể cụ thể cho DataProvider thời điểm chạy thông qua thư viện dll biên dịch sẵn nói trên) Gắn kết thành phần vào Solution cho phát triển ứng dụng Component Project (được tạo với biên dịch Class Library) Chứa thành phần Controller classes Info classes DataProvider classes Tên project SmallStoreComponents Các thư viện sử dụng DNN DotNetNuke.dll Microsoft.ApplicationBlocks.Data.dll SqlDataProvider Project (được tạo với biên dịch Class Library) Chứa thành phần SqlDataProvider class Các hàm thực thi SQL: Sql store procedures Tên project SmallStoreSql Các thư viện sử dụng DNN DotNetNuke.dll Microsoft.ApplicationBlocks.Data.dll Thư viện phụ thuộc SmallStoreComponents.dll Application Solution (solution cho ứng dụng) Solution tạo để gắn kết Projects project ứng dụng Tên Solution SmallStore Các thư viện sử dụng DNN DotNetNuke.dll Microsoft.ApplicationBlocks.Data.dll Thư viện xây dựng cho mơ hình lớp SmallStoreComponents.dll SmallStoreSql.dll Trải nghiệm mơ hình tích hợp ứng dụng Web-base Winform-based 4.1 Sự tích hợp Sau hiểu rõ mơ hình lớp, câu hỏi: “Làm tích hợp ứng dụng Webbased Windows form vào mơ hình phát triển ứng dụng?” có lẽ có câu trả lời Tuy nhiên vấn đề tính đến đâu (lớp nào) hai mơi trường phát triển phải tách Và có nói dùng lại áp dụng cho lớp DAL BLL, đến lớp ứng dụng hay UI (Presentation) ta phải cụ thể hóa đối tượng giao diện hai mơi trường lập trình khác Windows Form Controls Controller Object Web Form Controls DataProvider Object Info Object SQLDataProvider Object 4.2 Sự đồng tương đồng modules lập trình Hệ thống phát triển khơng dừng lại việc sử dụng chung DAL BLL Quy trình phát triển modules ánh xạ từ Web-based sang Winform-based Yêu cầu đăng nhập Xác thực Khởi tạo Session Cấp thẻ nhận thực Truy nhập ứng dụng Thoát ứng dụng Kết thúc Session Kết thúc phiên truy nhập Trên quy trình xác thực với hệ thống mơ hình hóa chung cho ứng dụng tích hợp Mục tiêu mơ hình đưa quy trình chung để hợp ứng dụng web winform Có khác biệt nhỏ ứng dụng web phải trao đổi thơng tin nhận thực client (browser) server, cịn ứng dụng winform, session khởi tạo, lưu giữ ứng dụng desktop việc xác thực qua thao tác kiểm tra biến session lưu Ta bàn tới việc xây dựng mơ hình module Tại ta bổ xung thành phần phù hợp với lập trình Winform từ mơ hình web: Phía bên phải hình mơ hình tương ứng giống xây dựng Web-based (chỉ khác chúng hiểu với tư cách Windows User Control) Phía bên trái thành phần bổ xung cho ứng dụng windows form Ở đây, forms lớp UI dựng lên từ User Controls kế thừa từ Portal ModuleBase mà bên có sẵn tham số phiên đăng nhập, cấu hình module, thơng tin người dùng quyền hạn truy nhập chức hệ thống hay quyền hạn sử dụng thao tác CSDL FormBase Portal ModuleBase MyFormBase MyModuleBase Các forms thể lớp UI Dựng User Control Kết luận Như sau có mơ hình ứng dụng tích hợp, ta phát triển, bảo trì, chí “du nhập” tồn phần chức lập trình web cho ứng dụng windows form ngược lại Việc làm rút ngắn nhiều thời gian phát triển ứng dụng Nếu quy trình nghiệp vụ (các chức năng) tách khỏi lập trình giao diện ta hồn tồn triển khai hệ thống chạy độc lập web windows form mà sử dụng chung thư viện hay mã nguồn viết (mà sửa đổi lại) Sự thực chúng tơi có hệ thống vậy.1 Sơ đồ phân tích thiết kế thư viện dựng sẵn (không phải mã nguồn), kèm theo công cụ sinh mã templates sinh mã hồn tồn cung cấp cho bạn để chạy thử ... thống tích hợp ứng dụng Desktop Web-based với mơ hình lớp NET Khái qt mơ hình triển khai phát triển ứng dụng 1.1 Sơ lược mơ hình lớp Nếu người phát triển ứng dụng web với công nghệ NET hẳn bạn nghe... xây dựng mô hình module Tại ta bổ xung thành phần phù hợp với lập trình Winform từ mơ hình web: Phía bên phải hình mơ hình tương ứng giống xây dựng Web-based (chỉ khác chúng hiểu với tư cách... Các khối truy nhập liệu Các đặc trưng mơ hình lớp 1 .3 Mơ hình thực thể triển khai hệ thống đa người dùng ` Lớp truy nhập liệu (DAL) Database Server Lớp Các thành phần thực thi (BLL) Các Thành