Xây dựng Provider Model mẫu Tìm hiểu cách cấu trúc Provider Model qua sơ đồ lớp sau: Sơ đồ lớp trên thể hiện cho ví dụ về xây dựng một Provider Model cho ứng dụng sử dụng linh hoạt nhiều
Trang 1THANH TOÁN TRỰC TUYẾN TRONG DOTSHOPPINGCART
Mục lục
I Xây dựng Provider Model 2
1 Giới thiệu 2
2 Xây dựng Provider Model mẫu 2
3 Nhận xét 6
II Kiến trúc tổ chức thanh toán trực tuyến trong DotShoppingCart (DSC) 7
1 Tổng quan 7
2 Provider Payment 7
3 Thiết lập Payment trong Admin 10
4 Sử dụng các provider trong Checkout 11
III Nhận xét tổng quan 12
1 Ưu điểm 12
2 Khuyết điểm 12
Trang 2I Xây dựng Provider Model
1 Giới thiệu
DotShoppingCart xây dựng các thành phần chức năng của hệ thống (trong đố
có payment) theo Provider Model
Provider Model là một mẫu thiết kế cho phép ứng dụng làm việc với nhiều
cách giải quyết khác nhau cho cùng một vấn đề
Mục đích:
làm cho ứng dụng dễ dàng mở rộng
dễ dàng làm việc với nhiều hướng tương tác với tập dữ liệu thông qua việc file thiết lập
2 Xây dựng Provider Model mẫu
Tìm hiểu cách cấu trúc Provider Model qua sơ đồ lớp sau:
Sơ đồ lớp trên thể hiện cho ví dụ về xây dựng một Provider Model cho ứng
dụng sử dụng linh hoạt nhiều phương thức lưu trữ và kết nối dữ liệu Dựa vào
giá trị tùy chỉnh trong file config hệ thống tự động chuyển qua lại giữa 2
phương thức lưu trữ khác nhau là SQL và XML
Qua sơ đồ thấy được một provider gồm 4 thành phần quan trọng:
Main Provider Class: DataProvider
Provider Collection Class: DataProviderCollection
Provider Configuration Class: DataProviderConfiguration
Provider Manager Class: DataProviderManager
Main Provider Class:
Trang 3- Là một lớp abstract kế thừa từ System.Configuration.ProviderBase – một lớp
cung cấp sẵn giúp mở rộng provider
- Định nghĩa những phương thức mà provider đảm nhận Những phương thức này cần được implement từ những provider thuộc loại này (kế thừa từ main
provider class) Trường hợp này là phương thức SaveValue
Provider Collection Class:
- Lớp này kế thừa từ System.Configuration.ProviderCollection – lớp đảm
nhận nhiệm vụ làm việc với danh sách các provider được khai báo trong file config
- Nhiệm vụ của lớp này là trả về provider từ danh sách các provider dựa vào tên của provider đó Điều này được thực hiện bằng việc gọi làm hàm xử lý
cơ bản của ProviderCollection
Provider Configuration Class:
Trang 4- Class này chứa những xử lý để quản lý những tùy chỉnh cho provider
- Kế thừa từ System.Configuration.ConfigSection và sử dụng những phương
thưc cơ bản từ lớp này để trả về danh sách các thiết lập provider và tên của
provider mặc định
- Có thể thêm mới những property tùy ý để chứa các giá trị lấy được từ file
config (những property phải tồn tại trong thiết lập trong file config)
- Mỗi property cần được bổ sung thêm thuộc tính ConfigurationProperty với
tham số là tên của property thể hiện trong file config
- Thuộc tính Providers (ProviderSettingsCollection) vai trò thể hiện cho thẻ
<providers /> trong file config
- Thuộc tính DefaultProviderName: set và get tên provider mặc định
Provider Manager Class:
Trang 5Nhiệm vụ của class này là khởi tạo provider và load tất cả những thiết lập tùy hỉnh vào bộ nhớ
Ở đây cần chú ý 2 điểm trong hàm Initialize:
Sử dụng phương thức GetSection cung cấp bởi
System Configuration.ConfigurationManager (tham số truyền vào là tên element chứa thiết lập trong file config, trong trường hợp này là DemoProvider)
để lấy về thể hiện của đối tượng thuộc Provider Configuration class
Dùng ProvidersHelper để khởi tạo đối tượng thuộc Provider Collection class từ danh sách các provider load được từ file config
Implement các thể hiện của Main Provider class:
- Trong ví dụ hiện tại có 2 class là thể hiện của Main Provider: SQLDataProvider và XMLDataProvider
- Nhiệm vụ chính của class là thể hiện của Main Provider:
Override lại các phương thức của Main Provider class
Trang 6 Override lại phương thức Initialize của ProviderBase để có thể lấy về
các giá trị được lưu trữ tương ứng cho provider này trong file config
Nội dung thiết lập trong file config:
3 Nhận xét
- Việc sử dụng Provider Model làm cho ứng dụng dễ dàng được mở rộng,
linh hoạt trong việc thay đổi các module hiện có (chỉ thay đổi trong file config)
- Thêm mới một module chức năng cơ bản được thực hiện như sau:
Xây dựng một main provider class định nghĩa những phương thức cơ bản (nếu chưa có) Bộ khung quản lý (Provider Configuration, Provider Manager, Provider Collection) cơ bản không thay đổi
Trang 7 Sau đó thêm các thể hiện cho main provider này và implement các phương thức với các xử lý logic
Cuối cùng là thiết lập các thông số trong file config
II Kiến trúc tổ chức thanh toán trực tuyến trong DotShoppingCart (DSC)
1 Tổng quan
- Thanh toán trực tuyến trong DSC tổ chức dựa trên Provider Model
- Các thành phần Provider Manager, Provider Collection, Provider
Configuration được tổ chức lại để có thể sử dụng cho cả ứng dụng nhưng bản chất nhiệm vụ của từng thành phần không thay đổi
- Các thiết lập về thanh toán được đặt trong file DSC.config
2 Provider Payment
Cấu trúc source code Provider :
Sơ đồ lớp tổ chức các provider thanh toán trong DSC:
Trang 8a DSCProvider: được xem là main provider class trong Provider Model
Định nghĩa phương thức GetConfigurationSettings cần được implement trong
các lớp con Phương thức yêu cầu trả về danh sách các thuộc tính của provider
Mỗi phương thức thanh toán có tập những thuộc tính khác nhau tại mỗi phương thức thanh toán cụ thể sẽ trả về tập các thuộc tính cần thiết
Định nghĩa mỗi ProviderAtribute:
b Phương thức quan trọng trong provider thanh toán
Ngoài những phương thức đặc thù cho từng phương thức thanh toán, những phương thức sau phải có trong mỗi provider cụ thể:
public override void Initialize( string name, NameValueCollection config)
Override lại phương thức Initialize từ ProviderBase
Lấy được các giá trị đã thiết lập trong file config
public override List < ProviderAttribute > GetConfigurationSettings()
Override lại phương thức GetConfigurationSettings từ DSCProvider
Trả về danh sách các thuộc tính
public static XXXPaymentProvider GetProvider()
Trả về provider mặc định thuộc loại provider hiện tại lấy từ file config
c Ví dụ trong phương thức thanh toán PaypalExpress
Trang 9- Initialize:
Lấy các giá trị thiết lập trong tham số config để khởi tạo provider
- GetConfigurationSettings:
Trả về các thuộc tính của PaymentExpress Những giá trị này được sử
dụng khi thiết lập tùy chọn cho Payment trong phần Admin
Trang 10- GetProvider:
Dựa vào SecctionName để trả về PaypalExpressPaymentServiceConfigurationSection
– chứa thông tin thiết lập cho PayPalExpress Từ thông tin thiết lập khởi tạo
được một thể hiện PaypalExpressPaymentProvider Thông tin trong file
config:
3 Thiết lập Payment trong Admin
Giao diện tùy chỉnh payment:
Trang 11- Việc load các phương thức thanh toán và cập nhật các tùy chính là hard-code !
- Mỗi lần update, các thông tin thiết lập được cập nhật lại vào file
DSC.config
4 Sử dụng các provider trong Checkout
- Việc sử dụng các provider trong thanh toán theo hướng hard-code !
- Khai báo sẵn các provider (dù rằng có dùng hay không)
- Dùng câu lệnh điều kiện if để xét xem phương thức nào đang được chọn để
sử lý không gọi động được ! Việc tích hợp một phương thức thanh toán mới khó khăn !
Trang 12III Nhận xét tổng quan
1 Ưu điểm
Các phương thức thanh toán trong DSC phát triển theo kiến trúc Provider
Model nên khả năng mở rộng, nâng cấp, thêm mới dễ dàng
2 Khuyết điểm
- Chưa cung cấp một phương pháp “động” tích hợp các phương thức đã xây dựng vào sử dụng khi Checkout
- Cấu trúc tổ chức các project, các class không hợp lý Các class nên được đóng gói vào các project riêng chuyên biệt