Hiển thị các bài đăng có nhãn DNN. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn DNN. Hiển thị tất cả bài đăng

Thứ Sáu, 20 tháng 7, 2007

Sử dụng DotNetNuke như một mô hình phát triển ứng dụng Desktop (Phần II)

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

School@net

GIẢI PHÁP QUẢN LÝ XÁC THỰC CHO ỨNG DỤNG DỰA TRÊN MÔ HÌNH CỦA DOTNETNUKE

1. Vấn đề xác thực người dùng cho ứng dụng

Quản lý bảo mật hay người đăng nhập (account management) luôn là một vấn đề cho các ứng dụng. Đây không phải là một vấn đề mới mà là một vấn đề luôn phải đặt ra ngay từ khi phần mềm là một thuật ngữ tồn tại trong ngành công nghệ thông tin, song những tiêu chí mới và những cách giải quyết mới vẫn được đưa ra để giải đáp vấn đề này.

Hình 1. Tiến trình đăng nhập ứng dụng.

Vậy thì một ứng dụng dụng được đặt ra vấn đề quản lý xác thực bảo mật là từ lúc nào? Câu trả lời là ngay từ khi thiết kế. Khi thiết kế kiến trúc tương tác cho ứng dụng, các công trình sư phần mềm đã phải cho mọi người thấy “khung sườn” của công trình, bởi vì việc xác thực và tương tác với phần mềm sẽ “bám theo” người đăng nhập tới từng chức năng cũng như đối tượng mà người đăng nhập sử dụng. Vậy vấn đề thiết kế và quy hoạch rõ ràng là quan trọng cần đầu tư chất xám, hơn là tập chung vào việc lập trình – cái mà người ta gọi là coding.

2. Ứng dụng Windows sử dụng mô hình của DotNetNuke 2.1. Mô hình quản lý đăng nhập trên web portal của DNN Trong phần trước, tôi đã trình bày về việc sử dụng các thư viện của DNN để xây dựng ứng dụng theo mô hình “bussiness logic”. Theo dòng tư duy này, tôi sẽ đưa ra tiếp mô hình xác thực và quản lý đăng nhập dành cho các tài khoản truy nhập ứng dụng. Xin trình bày ra ở đây mô hình quản lý tài khoản của DNN portal và các cơ chế của xác thực với portal DNN. Từ đó chúng ta phân tích và xây dựng mô hình xác thực dành cho ứng dụng của chúng ta.

Hình 2. Sơ đồ các thực thể quản lý đăng nhập trên hệ thống portal của webserver.

Thật không may mắn, khi chúng ta muốn tái sử dụng mô hình xác thực của DNN, việc xác thực dành cho một ứng dụng web lại khác so với một ứng dụng desktop. Tôi xin dẫn ra ở đây sự khác biệt trong hai mô hình này: Trong ứng dụng web: * Người đăng nhập sẽ tạo một phiên xác thực thông qua HTTP request. * Control phục vụ đăng nhập sẽ đăng ký phiên làm việc này trên web server. * Tài khoản đăng nhập vào portal sẽ được ánh xạ sang một ASP.Net user và đăng nhập vào webserver thông qua tài khoản này. * Các thông tin về phiên đăng nhập được web server quản lý và so sánh trong từng phiên đăng nhập. Trên ứng dụng desktop: * Người đăng nhập được xác thực thông qua trực tiếp chương trình * Thẻ nhận thực được chuyển cho các form và control trong chương trình * Thông tin về tài khoản đăng nhập được lưu trực tiếp trong ứng dụng Nhìn vào sơ đồ của hệ thống quản lý tài khoản và phân quyền cho ứng dụng ta có thể thấy được kiến trúc của việc quản lý xác thực trên web portal server. Một đặc điểm quan trọng là có một hệ thống đồng bộ giữa các tài khoản trên portal (nhóm phía dưới hình 2) và tài khoản cho việc truy nhập máy chủ web – ASP.Net authentication group (nhóm phía trên hình 2, tạm gọi tắt là AAG). Có thể có rất nhiều tài khoản được tạo ra trên portal nhưng chừng nào các tài khoản này chưa đăng nhập ứng dụng trên portal thì nó vẫn chưa được tạo ra trên AAG. Đặc điểm này cho phép việc xác thực và tương tác hệ thống có thể hoạt động độc lập. Việc đồng bộ thông tin được thực hiện trên 2 nhóm này đảm bảo ứng dụng và hệ thống có cùng một cơ sở xác thực. 2.2. Giải pháp cho xác thực và đăng nhập trên ứng dụng windows Một điều rõ ràng là xác thực trên ứng dụng sẽ hoạt động theo mô hình khác trừ phi chúng ta sử dụng một Module xác thực thông qua giao thức HTTP cắm trực tiếp trên Database server (cụ thể là SQL server). Song không phải ứng dụng nào cũng sử dụng http để khởi tạo phiên đăng nhập như vậy, nó khá là phiền phức và thậm chí là “rủi ro” vì xét về phương diện mạng, máy chủ dữ liệu lại phải mở và quản lý cả cổng dịch vụ HTTP. Các lập trình viên thì có thể không để ý đến điều này nhưng các nhà quản trị mạng lại đau đầu. Vậy giải pháp ở đây là gì? Tôi xin đưa ra một mô hình mà có thể sử dụng một phần mô hình của DNN, và đưa thêm một số quy trình xác thực trên những modules có sẵn của .NET. Các thành phần sẽ sử dụng trong mô hình xác thực được đưa ra

1. Quy trình của việc xác thực được đưa ra trong mô hình dưới đây

2. Các thành phần đã thiết kế được kích hoạt trong quá trình xác thực

3. Quy trình của xây dựng ứng dụng với các thành phần đã đưa ra

3. Mã nguồn của các thành phần (Component source codes)

Các bạn có thể download bài viết đầy đủ tại đây với toàn bộ mã nguồn.

Trịnh Hồng Cường

Sử dụng DotNetNuke như một mô hình phát triển ứng dụng Desktop (Phần I)

1. Khái quát về mô hình triển khai và phát triển ứng dụng

1.1. Sơ lược về DotNetNuke

Nếu là một người phát triển ứng dụng web với công nghệ .NET chắc hẳn bạn đã từng nghe nói đến DotNetNuke (DNN) như là một trong những mô hình phát triển Portal đầy triển vọng. Tuy nhiên, đã bao giờ bạn nghĩ rằng có thể sử dụng các “components” trong DNN để xây dựng một mô hình dành cho phát triển các ứng dụng trên Desktop?

Trong bài viết này, tôi xin đề cử một giải pháp mà có thể bạn sẽ thấy rằng những quy trình và mô hình ứng dụng để phát triển một Portal trên web có thể triển khai một quy trình xây dựng ứng dụng đa người dùng trên nền desktop có cơ sở dữ liệu tập trung.

Tôi xin dẫn ra đây mô hình xây dựng ứng dụng portal của DNN

1.2. Mô hình thực tế mô tả phát triển ứng dụng cụ thể

Áp dụng những gì DNN đã cung cấp và mô hình hóa, chúng ta sẽ xây dựng một hệt thống trên phát triển ứng dụng Desktop với C# và hệ quản trị CSDL tập trung trên MS SQL server. Mô hình triển khai khi áp dụng trên ứng dụng windows sẽ vẫn gồm các đặc trưng trên nhưng được áp dụng cho một hệ thống cụ thể với CSDL MSSQL server.

1.3. Mô hình các thực thể khi triển khai trên hệ thống đa người dùng

Vậy ở đây chúng ta phải quan tâm đến các vấn đề:

* Ứng dụng sẽ cung cấp những gì cho người dùng cuối (lớp UI – User Interface).

* Làm sao để xây dựng các lớp (classes) mô tả thông tin trên BLL (Business Logic Layer).

* Bằng cách nào người phát triển có thể duy trì BLL và không phải lập trình lại khi mà DAL của chúng ta dựa trên các thực thể CSDL khác nhau như SQL, Access, Oracle... (DAL – Data Access Layer).

* Đặc trưng nào của BLL và DAL cho phép chúng ta giảm bớt công việc lập trình bằng việc sử dụng những công cụ sinh mã (code generator)

Xin có một mách nước nhỏ: chúng ta sẽ sử dụng và tùy biến những công cụ cho phép sản sinh hàng loạt các đối tượng (tại BLL và DAL). Và hiển nhiên chúng ta tiết kiệm được thời gian và công sức (tới 40%) 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 và công việc của họ

2.1. Tổng quan về ứng dụng sử dụng cho việc trình diến (demo application)

Như vậy công việc của người phát triển (developer) là gì. Chúng ta hãy xem DNN đã cung cấp cho nhà phát triển những gì. Có lẽ nhiều hơn những gì tôi và các bạn có thể tưởng tượng ra. Tôi xin đi vào việc xây dựng một ứng dụng cụ thể nhỏ với CSDL và tìm hiểu các công cụ mà tôi đã áp dụng.

Chúng ta hãy xem xét một mô hình CSDL nhỏ (tạm gọi là SmallStore) mô tả việc quản lý đơn giản thông tin về việc bán hàng cho một cửa hàng.

Mô hình CSDL của SmallStore

Hệ thống bao gồm thông tin về các nhân viên, khách hàng, và hóa đơn trong việc bán các sản phẩm của một cửa hàng. Các thông tin có thể được truy xuất theo từng bảng, với các điều kiện lọc theo từng quan hệ (Foreign key Contraints).

2.2. Tìm hiểu sơ qua về các thành phần có thể sử dụng của DNN

DotNetNuke.dll

Thư viện các thành phần Framework của DotNetNuke

Microsoft.ApplicationBlocks.Data.dll

Thư việc các hàm làm việc trực tiếp với CSDL

DotNetNuke.SqlDataProvider.dll

Thư viện các sqlHelper dành cho việc truy nhập cơ sở dữ liệu trên MS SQL server DotNetNuke.Caching.BroadcastPollingCachingProvider.SQLDataProvider.dll

Thư viện các phương thức quản lý bộ lưu đệm (cache) dùng cho tối ưu hóa truy nhập CSDL vợi MS SQL server

Với các nhân tố trên, chúng ta bước đầu có thể bắt tay vào việc xây dựng các thành phần của ứng dụng. Tôi xin trình bày về quá trình triển khai các components theo thứ tự từ dưới lên (từ lớp truy nhập dữ liệu DAL) trong mô hình đã đưa ra.

2.3. Công cụ sinh mã (codesmith explorer) và các tùy biến

Codesmith là một phần mềm, hay đúng hơn là một môi trường phát triển mẫu (template) dành cho việc sản sinh các đoạn mã dựa trên những tham số đưa vào và CSDL đã xây dựng. Có thể tìm thấy Codesmith và tải về theo liên kết http://www.ericjsmith.net/codesmith/ CodeSmith Explorer là một ứng dụng nhỏ và miễn phí trong bộ CodeSmith Studio (bản thương mại – không miễn phí). CodeSmith Explorer khi được cài đặt sẽ có thể tích hợp sẵn trong môi trường lập trình của Visual Studio .NET dưới dạng một Add-on. CodeSmith Explorer sử dụng các templates để sinh mã cho việc lập trình. Các mẫu dành cho phát triển module trong DNN có thể download miễn phí tại liên kết http://lucaslabs.net/blogs/mccullochs/archive/2004/02/15/487.aspx.

2.4. Xây dựng các Projects phục vụ cho công việc

Chúng ta sẽ sử dụng các DNN Template đã được cài đặt tích hợp với VS.NET 2003 để tạo ra các Projects mới phục vụ cho phát triển modules trên DNN.


(Nguồn http://www.vnschool.net)