2010-04-01 13 views
18

Documentation nói:Grails: lớp dịch vụ VS Groovy

Đội Grails không khuyến khích các nhúng của ứng dụng cốt lõi Logic điều khiển bên trong, vì nó không thúc đẩy tái sử dụng và một tách sạch các mối quan tâm.

Tôi có một bộ điều khiển API và một vài lớp Groovy trong thư mục src/groovy. Các lớp đó chỉ thực hiện logic ứng dụng của tôi để các hoạt động trong bộ điều khiển API hoạt động theo cách này:

//index page 
def index = { 
    render new IndexApi().index(params) as JSON 
} 

Tôi tò mò - có lý do gì để chuyển logic ứng dụng của tôi từ các lớp học đơn giản thành các dịch vụ?

Trả lời

9

Nếu bạn muốn có hành vi giao dịch, bạn nên đặt logic của mình trong Dịch vụ. Khác bạn sẽ phải tự chăm sóc nó, mà không phải là tinh thần sử dụng Grails.

Không phải là chuyên gia về grails, tôi đặt các lớp 'không giao dịch' bên ngoài lớp dịch vụ, như lớp trình xây dựng, người trợ giúp và logic khác không giao dịch nhưng được sử dụng từ lớp dịch vụ.

7

Có ba lý do:

  1. Nó làm cho bộ điều khiển nhỏ hơn -> dễ hiểu và duy trì

  2. Nó làm cho bạn logic dễ dàng hơn để kiểm tra.

  3. Bạn thực sự không muốn quản lý giao dịch của mình theo cách thủ công.

Nếu bạn đặt mọi thứ vào bộ điều khiển, bạn cần tạo thời gian chạy trên web để có thể chạy bất kỳ thử nghiệm nào. Nếu logic của bạn ở bên ngoài, bạn có thể sao chép dữ liệu bạn cần từ yêu cầu HTTP và tất cả các nguồn khác và chỉ cần gọi mã. Vì vậy, logic không phụ thuộc vào phiên HTTP, yêu cầu hoặc bất cứ điều gì khác mà bạn không muốn. Ví dụ: để kiểm tra JSP, bạn cần HTTPRequest. Đối với một yêu cầu, bạn cần một HTTPSession và một JSPWriter. Những người cần một bối cảnh phiên. Vì vậy, chỉ để có thể chạy một thử nghiệm duy nhất, bạn cần phải thiết lập và khởi tạo một bó toàn bộ các lớp. Và tất cả đều là giao diện và việc triển khai là riêng tư. Vì vậy, bạn phải thực hiện các phương pháp thực tế (tất cả 300 của chúng) cho mình. Và bạn tốt hơn có được quyền này hoặc các xét nghiệm của bạn sẽ không kiểm tra những gì bạn muốn.

20

Dịch vụ thực sự không chỉ là về giao dịch. Các dịch vụ này rất tuyệt vời cho các thành phần singleton không có cấu hình, và chúng có thể được nạp lại mà không cần khởi động lại toàn bộ môi trường grails, và chúng có thể được phát hiện như các đồ tạo tác và do đó tự động tiếp xúc với các phần bổ sung từ xa.