Ngữ cảnh:
Tầng truy cập dữ liệu DAO (Data Acess Object) có nhiệm vụ tƣơng tác miền đối tƣợng hệ thống với cơ sở dữ liệu. Gói truy xuất dữ liệu bao gồm 5 nhóm.
Nhóm truy xuất cùng các đối tƣợng gian hàng.
Nhóm truy xuất cùng đối tƣợng sản phẩm và nhóm sản phẩm. Nhóm truy xuất cùng đơn hàng.
Vấn đề:
Đảm bảo có thể triển khai ứng dụng với các cơ sở dữ liệu khác nhau nhƣ: Oracle, SQL Server, Mysql…
Tách các lớp truy cập dữ liệu thành các nhóm khác nhau: Gian hàng, sản phẩm, đơn hàng, Ngƣời dùng.
Cách giải quyết:
Áp dụng mẫu Factory và Singleton để tách các nhóm.
Sử dụng mẫu Factory với từng cơ sở dữ liệu để đảm bảo có thể mở rộng với nhiều cơ sở dữ liệu khác nhau không ảnh hƣởng đến kiến trúc hệ thống đặc biệt là các tầng mức trên.
Hình 3.23: Lớp chi tiết áp dụng mẫu Factory cho tầng truy xuất dữ liệu DAO
DAOFactory: Cung cấp giao diện cho tầng dịch vụ triệu gọi thực thi các truy xuất với cơ sở dữ liệu đƣợc thiết lập mẫu Singleton và cung cấp 4 hàm cho 4 gói thực thi.
getKiotDAO: Truy xuất với các đối tƣợng liên quan đến gian hàng thuê. getProductDAO: Truy xuất với đối tƣợng liên quản sản phẩm nhƣ: Nhóm sản
getOrderDAO: Truy xuất với các đối tƣợng liên quan đến đơn hàng nhƣ: Đơn hàng, hóa đơn.
getUserDAO: Truy xuất với các đối tƣợng liên quan đến ngƣời dùng: Ngƣời dùng, nhóm ngƣời dùng, vai trò.
OracleDAOFactory: cung cấp giao diện cho truy xuất với cơ sở dữ liệu nếu đƣợc cấu hình là Oracle. Tƣơng tự nhƣ vấy với MysqlDAOFactory cho cơ sở dữ liệu Mysql với các đối tƣợng này khi mở rộng triển khai trên hệ thống cơ sở dữ liệu khác có thể tạo thêm một lớp DatabaseDAOFactory mà không ảnh hƣởng các lớp đã cài đặt.
IProduct: là lớp giao diện cung cấp các chức năng truy xuất với cơ sở dữ liệu. Tƣơng tự các lớp IKiot, IOrder và IUser.