Tôi gặp sự cố khi tổ chức mã của mình khi tôi muốn cập nhật đối tượng miền không đơn giản. Vấn đề là phân chia trách nhiệm cho bộ điều khiển và lớp dịch vụ.Grails - việc sử dụng lớp dịch vụ
Rõ ràng hơn, giả sử rằng chúng tôi có một khách hàng lớp miền phụ thuộc vào các lớp miền khác như Địa chỉ và vân vân.
Trong chế độ xem, có một gsp để chỉnh sửa một số thuộc tính Khách hàng bao gồm một số thuộc tính lồng nhau như đường phố trên Địa chỉ.
Khi tôi muốn cập nhật các trường này, tôi gọi phương thức cập nhật trên Bộ điều khiển (trong trường hợp này là ClientController).
Tôi thích tính năng đến từ lỗi của lớp miền khi được xác thực. Giống như nếu tôi trong Bộ điều khiển viết
Client client = Client.get(params.id)
client.properties = params
client.validate()
Nếu bây giờ khách hàng có lỗi, rất dễ hiển thị chúng trong chế độ xem chỉnh sửa.
Nhưng, tôi nghĩ rằng việc cập nhật, lưu và nhận khách hàng từ cơ sở dữ liệu (Client.get (theId)) nên được xử lý bởi lớp dịch vụ. Trong trường hợp của tôi, tôi phải cập nhật hoặc tạo các đối tượng miền khác (như Địa chỉ) trước khi cập nhật Ứng dụng khách.
Vì vậy, một trong các câu hỏi của tôi là giao diện API trông như thế nào đối với lớp dịch vụ?
public ... updateClient(…)
Trong tài liệu, họ có ví dụ nhỏ về cập nhật tuổi của một người. Vì vậy, API của họ bao gồm id của người và độ tuổi mới. Nhưng, trong trường hợp của tôi, tôi có khoảng mười params từ xem và họ chỉ là một tập hợp con của tất cả các thuộc tính của một khách hàng và tôi không biết cái nào trong số này đã thay đổi.
- Tôi muốn có một Khách hàng trong bộ điều khiển mà tôi có thể xác thực và gửi lại chế độ xem chỉnh sửa nếu có lỗi xác thực.
- Tôi muốn xử lý các tương tác và giao dịch cơ sở dữ liệu từ lớp dịch vụ.
Làm cách nào để kết hợp chúng? Các lớp khác nhau có trách nhiệm gì về cập nhật? API của lớp dịch vụ trông như thế nào về cập nhật?
Nếu có triển khai tham chiếu tốt ở đâu đó, tôi rất sẵn lòng nghiên cứu nó. Nhiều lần, các lớp dịch vụ là tiếc là hoàn toàn hoặc bỏ qua một phần.
+1 câu hỏi hay. – David