2010-10-16 23 views
6

Tôi đang tạo đối tượng truy cập dữ liệu để truy xuất thông tin từ Google App Engine cho ứng dụng web được xây dựng trên khung công tác Spring (lần đầu tiên cho tất cả).DAO (đối tượng truy cập dữ liệu) thực hành tốt nhất - ví dụ tôi thấy sử dụng một DAO và một đối tượng dịch vụ cả hai, thực hành tốt nhất ở đây là gì?

Tôi thấy một số ví dụ sử dụng mẫu Bộ điều khiển/webapp -> Dịch vụ -> DAO -> JDO/Google-app-engine.

Trong mẫu này, lớp DAO là lớp duy nhất biết về JDO, do đó lớp này là lớp duy nhất cần thay thế nếu lưu trữ dữ liệu thay đổi. Tầng dịch vụ gọi lớp DAO và định dạng/thao tác các dữ liệu cần thiết.

Câu hỏi của tôi là lý do lớp dịch vụ bổ sung? Ít nhất ban đầu nó không có vẻ như lớp dịch vụ được thêm nhiều vào phương trình. Tôi sẽ tự nhiên nghĩ rằng chỉ cần viết một lớp DAO để đóng gói các yêu cầu JDO và thao tác và trả về dữ liệu.

Ai đó có thể cho tôi thấy lý trí cho một lớp Dịch vụ riêng biệt, điều này sẽ trở nên rõ ràng khi dự án trở nên lớn hơn và phức tạp hơn?

Trả lời

5

Thông thường bạn đặt DAO trong lớp dịch vụ vì ứng dụng của bạn trở nên phức tạp hơn, bạn sẽ làm những việc hữu ích và không tầm thường trong dịch vụ. Ví dụ, bạn có thể phối hợp các hoạt động dữ liệu phức tạp với hơn 1 DAO. Các lớp dịch vụ cũng cung cấp các ranh giới API phân ranh giới các mối quan tâm cắt ngang, như quản lý giao dịch, kiểm tra ủy quyền, ghi nhật ký hiệu suất, v.v.

Một lý do khác để trừu tượng hóa chức năng của bạn thành dịch vụ là nó khuyến khích các thành phần có thể tái sử dụng và bảo trì. Khi bạn bắt đầu, bạn có thể quan tâm đến việc chỉ trình bày một số html. Bạn viết một dịch vụ tải một số dữ liệu và xử lý phần html trong lớp phía trên lớp dịch vụ (lớp trình bày). Bây giờ bạn muốn đứng lên một webservice RESTful. Lớp dịch vụ của bạn có thể được sử dụng lại để tải dữ liệu; tất cả những gì bạn phải lo lắng là json hoặc xml trả về điểm cuối webservice của bạn (và tất nhiên là ngữ nghĩa REST).

Vì vậy, đối với trường hợp đơn giản, lớp Dịch vụ có thể thêm ít, nhưng khi ứng dụng của bạn mở rộng, chúng trở nên đáng giá và thậm chí cần thiết để giữ mã sạch.

2

Có, Ban đầu có vẻ như lớp dịch vụ không thêm nhiều vào phương trình. Nhưng hãy nghĩ về nó như thế này.

Lớp dịch vụ = lớp giữa bản trình bày và lớp doanh nghiệp của bạn.

Bạn phải biết rằng việc phân tách mối quan tâm giữa các lớp luôn là điều tốt. Lớp dịch vụ của bạn có thể ánh xạ tới miền kinh doanh khác biệt, các lớp trình bày, mà không bị làm phiền về cách sử dụng lớp DOA của bạn.

Bạn có thể coi đây là ranh giới giữa hai lớp khác, trong trường hợp này là giữa lớp trình bày và lớp doanh nghiệp. Mã trong lớp trình bày thường thực hiện các trường hợp sử dụng. Một ca sử dụng điển hình là một chuỗi các hành động được thực hiện bởi người dùng dẫn đến tương tác giữa một hoặc nhiều đối tượng nghiệp vụ, luồng công việc và dịch vụ. Lớp dịch vụ cho phép bạn trừu tượng hóa các tương tác nhỏ hơn này với một API trung gian, được hiển thị thông qua các dịch vụ chi tiết hơn. Lớp trình bày thực hiện một cuộc gọi đến một dịch vụ trong lớp. Phương thức lớp dịch vụ được gọi sẽ phối hợp các đối tượng và luồng công việc trong lớp nghiệp vụ để thực hiện hành vi được yêu cầu.

an Mối quan tâm

  1. tôi làm tạo ra một lớp an ninh xung quanh ngăn xếp dịch vụ. Điều này sẽ giúp tôi xác định tính xác thực của người dùng và truy cập dịch vụ đã cho.
  2. Tôi cũng có một lớp giao dịch được xác định quanh lớp dịch vụ, Nó yêu cầu cơ sở dữ liệu thực hiện các thay đổi được thực hiện trong lớp dịch vụ, một khi nó trở lại sau khi thực hiện thành công.

Những điều này cũng cần được quan tâm, nếu bạn đang xác định các lớp ứng dụng của mình.

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