Giả sử bất cứ khi nào tôi thực hiện thao tác CRUD hoặc sửa đổi mối quan hệ theo cách cụ thể tôi cũng muốn làm điều gì đó khác. Ví dụ, bất cứ khi nào ai đó xuất bản một bài đăng, tôi cũng muốn lưu một cái gì đó vào bảng để phân tích. Có thể không phải là ví dụ tốt nhất nhưng nói chung có rất nhiều chức năng "được nhóm" này.
Thông thường tôi thấy loại logic này được đưa vào bộ điều khiển. Đó là tất cả tốt đẹp cho đến khi bạn muốn tái tạo chức năng này ở nhiều nơi. Khi bạn bắt đầu tham gia vào các phần, việc tạo API và tạo nội dung giả, nó trở thành một vấn đề với việc giữ mọi thứ KHÔ.
Các cách tôi đã thấy để quản lý điều này là các sự kiện, kho lưu trữ, thư viện và thêm vào các mô hình. Dưới đây là những hiểu biết của tôi về mỗi:
Dịch vụ: Đây là nơi mà hầu hết mọi người có thể sẽ đặt mã này. Vấn đề chính của tôi với các dịch vụ là đôi khi thật khó để tìm thấy chức năng cụ thể trong chúng và tôi cảm thấy như chúng bị lãng quên khi mọi người tập trung vào sử dụng Eloquent. Làm thế nào tôi biết tôi cần gọi một phương thức publishPost()
trong thư viện khi tôi có thể làm được $post->is_published = 1
?
Điều kiện duy nhất tôi thấy điều này hoạt động tốt là nếu bạn CHỈ sử dụng các dịch vụ (và lý tưởng nhất là làm cho Eloquent không thể truy cập bằng cách nào đó từ tất cả các bộ điều khiển cùng nhau).
Cuối cùng, có vẻ như điều này sẽ tạo ra một loạt các tệp không cần thiết nếu các yêu cầu của bạn thường tuân theo cấu trúc mô hình của bạn.
Kho lưu trữ: Theo những gì tôi hiểu thì về cơ bản nó giống như một dịch vụ nhưng có giao diện để bạn có thể chuyển đổi giữa các ORM mà tôi không cần.
Sự kiện: Tôi thấy đây là hệ thống thanh lịch nhất theo nghĩa vì bạn biết các sự kiện mô hình của bạn sẽ luôn được gọi theo phương thức Eloquent, vì vậy bạn có thể viết bộ điều khiển của mình như bình thường. Tôi có thể thấy những điều này trở nên lộn xộn và nếu bất cứ ai có ví dụ về các dự án lớn sử dụng các sự kiện cho khớp nối quan trọng tôi muốn xem nó.
Mô hình: Theo truyền thống, tôi có các lớp thực hiện CRUD và cũng xử lý khớp nối quan trọng. Điều này thực sự làm mọi thứ trở nên dễ dàng bởi vì bạn biết tất cả các chức năng xung quanh CRUD + bất cứ điều gì phải được thực hiện với nó ở đó.
Đơn giản, nhưng trong kiến trúc MVC, đây không phải là điều tôi thường làm. Theo một nghĩa nào đó mặc dù tôi thích điều này hơn các dịch vụ vì nó dễ tìm hơn một chút và có ít tệp để theo dõi hơn. Nó có thể có một chút vô tổ chức mặc dù. Tôi muốn nghe những nhược điểm của phương pháp này và tại sao hầu hết mọi người dường như không làm điều đó.
Những ưu điểm / nhược điểm của từng phương pháp là gì? Tui bỏ lỡ điều gì vậy?