Tôi đến từ một nền Java/Grails và dường như không thể tìm thấy câu trả lời xác định trực tuyến là nơi lưu trữ logic dịch vụ cho ứng dụng CakePHP. Bởi "Dịch vụ", tôi đang nói về các lớp học thường được khởi tạo thông qua tiêm phụ thuộc để tiến hành logic nghiệp vụ trên các đối tượng miền. Họ sẽ có thể truy vấn bất kỳ đối tượng miền nào và thực hiện các thay đổi để phản hồi lại hành động của bộ điều khiển.CakePHP: Nơi đặt logic 'Dịch vụ'
Hiện tại, lớp "Thành phần" của CakePHP có vẻ là đối sánh gần nhất với hành vi này. Tôi có thể tải một thành phần vào bất kỳ bộ điều khiển nào và thực thi các phương thức của nó khi cần thiết. Tuy nhiên, tôi đã đọc ở một số nơi mà các thành phần không bao giờ nên truy cập cơ sở dữ liệu và làm như vậy sẽ dẫn đến một số lần truy cập hiệu suất dốc.
Tôi cũng đã xem xét lớp "Hành vi" của CakePHP và dường như nó không phù hợp với vé. Nó có vẻ được trang bị tốt để tổ chức các đối tượng miền vào một thiết lập cấu trúc dữ liệu, nhưng đó không phải là loại logic mà một dịch vụ sẽ thực thi. Ngoài ra, để nhập bất kỳ định nghĩa mô hình nào vào Hành vi, tôi sẽ phải chỉnh sửa định nghĩa mô hình chính nó để cho phép truy cập, điều này rất khó xử.
Vì vậy, tôi đặt câu hỏi này: Trường hợp logic dịch vụ nên được lưu trữ ở đâu? Chắc chắn không phải là bộ điều khiển vì nó chỉ chứa logic tối thiểu để xử lý yêu cầu và gửi phản hồi.
Đây là một gợi ý miễn phí cho bạn: tránh xa CakePHP. Đó là một trong những khung công tác tồi tệ nhất trong PHP và nó chắc chắn không thực hiện bất cứ điều gì từ xa như MVC. Nếu muốn sử dụng một cái gì đó mà ít nhất là nhận ra khái niệm về "dịch vụ", bạn có thể thử Symfony2. –
Đối số 1: trạng thái toàn cầu. CakePHP về cơ bản là xung quanh việc sử dụng các thông số đơn lẻ và các thông số khác. –
Đối số 2: các lớp tĩnh: phần lớn lõi CakePHP bao gồm các phương thức tĩnh. Điều đó làm cho tất cả các mã được kết hợp chặt chẽ với các tên cụ thể của các lớp, mà cuối cùng được sử dụng như không gian tên. –