Lý tưởng nhất là lớp DAO của bạn 'tóm tắt' quyền truy cập vào một số hệ thống lưu trữ dữ liệu (cơ sở dữ liệu, hệ thống tệp, thư mục LDAP, ...). Vì vậy, theo nghĩa đó, nó chỉ được sử dụng cho các nhiệm vụ liên quan đến truy cập dữ liệu. Tuy nhiên, bạn cũng có thể có một lớp DAO truy cập một dịch vụ web hoặc một số thành phần khác bên ngoài ứng dụng của bạn. Đó là điểm mấu chốt, nó cung cấp quyền truy cập vào một số thành phần bên ngoài.
Ý tưởng chính là không có chi tiết triển khai nào của lớp DAO của bạn thoát ra lớp cao hơn (cách ly). Một điểm khởi đầu tốt để suy nghĩ về điều này là: tôi sẽ cần phải làm gì nếu tôi dự định thay thế thành phần (một cơ sở dữ liệu ví dụ) mà lớp DAO của tôi cung cấp quyền truy cập vào? Ví dụ, bạn có một số dữ liệu bên trong các tệp XML và bạn định di chuyển dữ liệu vào cơ sở dữ liệu.
Giả sử bạn có tất cả các loại ngoại lệ liên quan đến XML thoát khỏi lớp DAO của bạn. Sau đó, nó trở nên khá khó khăn để di chuyển lớp XML của bạn vào một lớp cơ sở dữ liệu. Tuy nhiên, nếu bạn đã đóng gói tất cả các chi tiết triển khai của lớp DAO của bạn, điều này sẽ trở nên dễ dàng hơn rất nhiều.
Cuối cùng, đó là về khả năng bảo trì mã của bạn. Bạn càng ít phụ thuộc vào chi tiết triển khai của một lớp cụ thể (dịch vụ, DAO, ...), mã của bạn càng được bảo trì tốt hơn.
Nguồn
2010-03-18 09:25:42
"Tôi cần làm gì nếu tôi dự định thay thế thành phần (ví dụ cơ sở dữ liệu)" - nếu tôi nhớ chính xác, đó là về Lớp truy cập dữ liệu trong kiến trúc 3 tầng (theo Fowler). – Roman