2013-02-17 36 views
14

Tôi hơi bối rối về một ví dụ được tìm thấy trên web - spring & hibernate (điểm 4. Model & BO & DAO). Có các lớp Model, DAO và BO (+ DAO và BO). Những gì tôi không hiểu rõ ràng là tại sao DAO và BO được tách ra thành các lớp khác nhau nếu chúng chia sẻ chính xác các chức năng giống nhau (chỉ khác biệt là BO có bộ cài DAO).DAO & BO (lớp truy cập dữ liệu) - kiến ​​trúc

Tác giả chỉ giải thích, rằng các mô hình:

rất hữu ích để xác định các lớp rõ ràng để tránh lộn xộn lên cấu trúc dự án

nhưng có vẻ như quá thiết kế để cho tôi (ít nhất trong trường hợp này). Tôi biết ví dụ này là rất đơn giản, nhưng những gì phân chia lớp này có thể hữu ích cho? Ai đó có thể cung cấp một ví dụ?

+1

tôi imange Bos của một người sẽ _hold_ dữ liệu trong khi DAO của một người sẽ _retrieve_ dữ liệu. –

+1

Nếu DAO không được tách rời thì sẽ rất khó cho các BO (dịch vụ) sử dụng lại các DAO. Có những ưu điểm khác nữa, giống như nếu bạn thay đổi khung công tác DB hoặc ORM cơ bản, BOs không bị ảnh hưởng vì chỉ có phần thực hiện của DAO cần thay đổi. – techuser

Trả lời

26

Điều họ gọi là BO có vẻ là dịch vụ kinh doanh. Công việc của DAO là chứa mã liên quan đến sự kiên trì: chèn, cập nhật, truy vấn cơ sở dữ liệu.

Dịch vụ phân định ranh giới giao dịch, chứa logic nghiệp vụ và thường sử dụng một hoặc nhiều DAO để triển khai logic này. Đối với một số trường hợp sử dụng, dịch vụ chỉ ủy quyền cho DAO. Đối với những người khác, nó gọi một số phương pháp của một hoặc nhiều DAO.

Ví dụ cổ điển là một dịch vụ chuyển tiền:

public void transferMoney(Long sourceAccountId, Long targetAccountId, BigDecimal amount) { 
    Account source = accountDAO.getById(sourceAccountId); 
    Account target = accountDAO.getById(targetAccountId); 
    if (source.getBalance().compareTo(amount) < 0) { 
     throw new NotEnoughMoneyException(); 
    } 
    source.decrementBalance(amount); 
    target.incrementBalance(amount); 
    auditDAO.insertTransaction(sourceAccountId, targetAccountId, amount); 
    // other business logic 
} 
+0

Ví dụ rất hay, cảm ơn bạn. – ducin

Các vấn đề liên quan