4. Tóm tắt cấu trúc của luận văn
1.3. Một số mẫu thiết kế ựiển hình trong các ứng dụng quản lý
1.3.9. Mẫu Cổng dữ liệu của bảng
1.3.9.1. Ý nghĩa
Mẫu Cổng dữ liệu của bảng (Table Data Gateway) mô tả một ựối tượng hoạt ựộng như một ỔCổngỖ vào một bảng trong CSDL. Một thể hiện của nó quản lý tất cả các dòng trong bảng.
Hình 1.13: Cấu trúc mẫu Table Data Gateway
Việc ựưa lẫn các câu lệnh SQL vào trong logic của ứng dụng có thể gây ra nhiều vấn ựề. Rất nhiều nhà phát triển không rành về SQL và rất nhiều người viết ra các câu lệnh SQL không ựược tốt lắm. Người quản trị CSDL có thể tìm ra các câu SQL một cách dễ dàng, vì vậy họ có thể chỉ ra làm thế nào ựể ựiều chỉnh và lấy ra dữ liệu từ CSDL.
Một Table Data Gateway giữ tất cả các câu SQL dùng ựể truy cập vào một bảng
hoặc một view như: truy vấn (SELECT), thêm mới (INSERT), cập nhật (UPDATE) và xóa (DELETE). Các thành phần khác trong hệ thống sẽ gọi ựến các phương thức của lớp này ựể thực hiện toàn bộ các thao tác với CSDL.
1.3.9.2. Mô tả
Một Table Data Gateway có một giao diện ựơn giản, thường bao gồm một vài
phương thức ựể tìm kiếm dữ liệu cùng với các phương thức ựể thêm/ xửa/ xóa dữ liệu. Mỗi phương thức này ánh xạ các tham số truyền vào trong một lời gọi SQL và thực thi câu SQL ựó cùng với kết nối ựến CSDL. Table Data Gateway thường không có trạng thái (stateless), vai trò của nó là ựẩy dữ liệu lên và lấy dữ liệu về.
điều tinh tế nhất về TableDataGateway là làm thể nào ựến trả về thông tin từ một câu truy vấn. Thậm chắ một câu truy vấn ựơn giản nhất như là tìm kiếm theo ựịnh danh có có thể trả về nhiều dòng dữ liệu. Trong môi trường lập trình mà ở ựó nó trả về nhiều dòng thì ta có thể áp dụng cho trường hợp trả về một dòng. Tuy nhiên thì nhiều ngôn ngữ chỉ trả về cho ta một giá trị ựơn lẻ, nhiều câu truy vấn mới trả về nhiều dòng.
Một vấn ựề tương tự nữa là trả về một vài cấu trúc dữ liệu ựơn giản, vắ dụ như là một ánh xạ. Một ánh xạ hoạt ựộng nhưng nó bắt buộc dữ liệu phải ựược sao chép ra khỏi bản ghi lấy từ CSDL vào trong ánh xạ ựó. Việc sử dụng ánh xạ ựể chuyển dữ liệu cho các ựối tượng khác là một cách thức không phù hợp vì nó ảnh hướng ựến việc kiểm tra thời gian dịch, và nó cũng không phải là một giao diện rõ ràng, ựiều này sẽ gây ra lỗi như là người dùng sẽ không hiểu những thứ ở trong ánh xạ ựó. Một cách
tương tự tốt hơn ựó là dùng DataTransfer Object (hay là Value Object). đây là ựối tượng dùng ựể tạo và ựược dùng ở những phần khác của ứng dụng.
Nếu ta ựang sử dụng một Domain Model thì ta có thể dùng Table Data Gateway ựể trả về các ựối tượng miền tương ứng. Có một vấn ựề về cách tiếp cận này thì chúng ta cần phải có các ràng buộc hai chiều giữa các ựối tượng miền và Gateway.
đa phần khi sử dụng Table Data Gateway ta sẽ cần mỗi Gateway cho mỗi bảng trong CSDL, tuy nhiên trong các trường hợp ựơn giản ta có thể có một Table Data
Gateway riêng lẻ ựể quản lý toàn bộ các phương thức cho tất cả các bảng. Cũng có thể
cần một Gateway cho nhiều các View hoặc thậm chắ nhiều câu truy vấn mà ta không lưu thành các View trong CSDL. đương nhiên các Table DataGateway dựa trên các View sẽ thường không phải cập nhật dữ liệu và vì thế mà nó sẽ không cần các phương thức cập nhật. Tuy nhiên, ta có thể thực hiện việc cập nhật cho các bảng ở trong View sau ựó bao gói việc cập nhật này dưới dạng các phương thức cập nhật trong các Table Data
Gateway.
1.3.9.3. Các tình huống áp dụng
TableDataGateway là một mẫu giao diện CSDL ựơn giản nhất hay ựược dùng, nó
ánh xạ một cách chuẩn xác vào các bảng trong CSDL hoặc dữ liệu kiểu bản ghi. Nó bao gói các logic truy cập ựến nguồn dữ liệu. Table DataGateway ắt khi ựược sử dụng
với DomainModel bởi vì Data Mapper ựưa ra một sự cách ly tốt hơn giữa Domain Modell
và CSDL.
Table Data Gateway rất phù hợp với mẫu Transaction Script. Nhiều người thường
thắch dùng DataTransferObject, nhưng ựiều ựó tỏ ra không hiệu quả lắm trừ phi ta dùng
DataTransferObject ựó cho nhiều mục ựắch khác.
Một trong những lợi ắch của việc sử dụng TableDataGateway là bao gói việc truy cập dữ liệu và trong cùng một giao diện mà ở ựó ta có thể sử dụng các câu truy vấn SQL ựể thao tác với CSDL và cả các thủ tục lưu trữ (Stored Procedures), hơn nữa các thủ tục lưu trữ thường ựược tổ chức như là các TableDataGateway.