Cong ty Cong Nghe Tin hoc Nha truong http://www.vnschool.net
Sử dụng DotNetNuke như một mô hình phát triển ứng dụng Desktop (Phần II)
31/01/2007

2.5. Mô hình lập trình với DotNetNuke

2.5.1. Mô hình các đối tượng trong DNN components

Chúng ta hãy xem xét một ví dụ của việc tạo ra các lớp để có thể thao tác với đối tượng lớp nhân viên (ứng với bảng HT_NhanVien trong CSDL). Các components được tạo ra sẽ có dạng thức như sau. Trong ví dụ này, phương thức lấy thông tin của một nhân viên theo khóa chính MaNhanVien được sử dụng để cho thấy các đối tượng trong kiến trúc của DNN.


Mô hình của các đối tượng trong DNN được trình bày trong sơ đồ dưới đây

Controller Class

Đối tượng điều khiển, sự dụng các phương thức của DataProvider để truy xuất dữ liệu.

Info Class

Lớp mô tả các đối tượng lưu trữ thông tin

DataProvider Class

Lớp ảo (abstract) định nghĩa các phương thức truy nhập dữ liệu. Lớp ảo này cho phép phát triển độc lập các mô tả truy nhập dữ liệu.

SqlDataProvider Class

Đối tượng truy nhập dữ liệu thực sự

Store Procedure

Các thủ tục ở CSDL MSSQL server được SqlDataProvider sử dụng

2.5.2. Triển khai cụ thể của các DNN Components

public class NhanVienController : DotNetNuke.Entities.Modules.ISearchable, DotNetNuke.Entities.Modules.IPortable

{
public NhanVienInfo Get(string maNhanVien)
{
return
(NhanVienInfo)DotNetNuke.Common.Utilities.CBO.FillObject(DataProvider.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)
{
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.6. Xây dựng thành phần (components) cho lớp Data Access Layer (DAL)

2.6.1. Khởi động CodeSmith Explorer

2.6.2. Tạo một kết nối mới

Chọn Bảng trong CSDL cần triển khai sqlDataProvider cho nó (Chúng ta có thể chọn nhiều bảng để sản sinh cùng một lúc, nhưng để việc trình bày trong sáng hơn thì tôi dẫn ra việc sinh mã với bảng HT_NhanVien

Có một số lưu ý: Các bảng được chọn sinh mã bắt buộc phải có trường khóa chính (Primary Key) trong bảng. Khi đó các phương thức của SqlDataProvider được sinh ra có thể nhận biết được các tiêu chí như thêm, sửa, xóa, cập nhật và tìm kiếm.

2.6.3. Việc sinh mã thực hiện thành công

Khi đó ta chỉ việc chép (copy) phần mã vừa sinh ra vào file SqlDataProvider.cs của lớp SqlDataProvider trong project tạo DAL mà ta đã tạo ra ở trên.

Đoạn mã chứa các phuơng thức của SqlDataProvider dành cho truy xuất thông tin Nhân viên trong CSDL

#region "NhanVien Methods"

public override IDataReader GetNhanVien(string maNhanVien)

{
return (IDataReader)SqlHelper.ExecuteReader(ConnectionString, DatabaseOwner + ObjectQualifier + "HT_NhanVienGet", maNhanVien);
}
public override IDataReader ListNhanVien()
{
return (IDataReader)SqlHelper.ExecuteReader(ConnectionString, DatabaseOwner + ObjectQualifier + "HT_NhanVienList");
}
public override int AddNhanVien(string ten, bool gioiTinh, DateTime ngaySinh, string dienThoai, string diaChi, string maPB, double heSoLuong)
{
return
int.Parse(SqlHelper.ExecuteScalar(ConnectionString, DatabaseOwner + ObjectQualifier + "HT_NhanVienAdd", GetNull(ten), GetNull(gioiTinh), GetNull(ngaySinh), GetNull(dienThoai), GetNull(diaChi), GetNull(maPB), GetNull(heSoLuong)).ToString());
}
public override void UpdateNhanVien(string maNhanVien, string ten, bool gioiTinh, DateTime ngaySinh, string dienThoai, string diaChi, string maPB, double heSoLuong)
{
SqlHelper.ExecuteNonQuery(ConnectionString, DatabaseOwner + ObjectQualifier + "HT_NhanVienUpdate", maNhanVien, GetNull(ten), GetNull(gioiTinh), GetNull(ngaySinh), GetNull(dienThoai), GetNull(diaChi), GetNull(maPB), GetNull(heSoLuong));
}
public override void DeleteNhanVien(string maNhanVien)
{
SqlHelper.ExecuteNonQuery(ConnectionString, DatabaseOwner + ObjectQualifier + "HT_NhanVienDelete", maNhanVien);
}
#endregion

Xây dựng các Store Procedure một cách tự động cũng sử dụng một template có sẵn mà ta đã tải về trong DNN Template đó là StoredProcedures.cst. Có một số chú ý, vì các Store procedure được sử dụng trong việc cài đặt các modules của DNN trên mô hình portal nên một số tiền tố được lưu vào tong đoạn mã sql. Để chuyển về mô hình ứng dụng của chúng ta thì cần thay thế

* “{databaseOwner}” thành “dbo.” * “{objectQualifier}” thành “” (chuỗi rỗng)

Và công việc cuối cùng của chúng ta chỉ là chạy sql script này trong SQL Analyzer.

2.7. Xây dựng thành phần cho lớp triển khai (Bussiness Logic Layer-BLL)

Công việc triển khai lớp BLL cũng được thực hiện tương tự. Chúng ta sẽ sử dụng các code templates và dùng Code Smith để sinh mã cho các lớp trong BLL. Các templates này được liệt kê dưới đây:

Có một lưu ý khi sử dụng các template này là chúng ta phải cung cấp “{objectQualifier}” khi thực hiện sinh mã, tham số này bắt buộc phải có. Trong mô hình đưa ra ví dụ ở đây chúng ta đã xây dựng các bảng trong CSDL với tiền tố “HT_” và nó chính là tham số mà chúng ta phải cung cấp cho ObjectQualifier.

Nguyên nhân của việc xây dựng hệ thống với ObjectQualifier là để chúng ta có thể quản lý nhiều modules và các project khác nhau một cách độc lập nhưng lại có thể giao tiếp với nhau một cách rõ ràng. Đặc điểm này cho phép xây dựng những hệ thống có ưu thế về quản lý mã nguồn.

3. 3. Gắn kết các thành phần vào một Solution cho phát triển ứng dụng
URL của bài viết này::http://www.vnschool.net/modules.php?name=News&file=article&sid=710
© Cong ty Cong Nghe Tin hoc Nha truong contact: sales@schoolnet.vn