Vì vậy, một tình huống tôi gặp phải thường xuyên là một trong những mô hình của tôi bắt đầu:
- Phát triển thành quái vật với hàng tấn phương pháp
HOẶC LÀ
- Cho phép bạn chuyển các phần SQL cho chúng, để chúng đủ linh hoạt để không yêu cầu hàng triệu phương thức khác nhau
Ví dụ: giả sử chúng ta có mô hình "widget". Chúng tôi bắt đầu với một số phương pháp cơ bản:
- nhận ($ id)
- chèn (bản ghi $)
- cập nhật ($ id, $ record)
- xóa ($ id)
- getList () // lấy danh sách Widgets
Đó là tất cả tốt và đẹp, nhưng sau đó chúng tôi cần một số báo cáo:
- listCreatedB between ($ start_date, $ end_date)
- listPurchasingB between ($ start_date, $ end_date)
- listOfPending ()
Và sau đó báo cáo bắt đầu trở nên phức tạp:
- listPendingCreatedB between ($ start_date, $ end_date)
- listForCustomer ($ customer_id)
- listPendingCreatedB AmongForCustomer ($ customer_id, $ start_date, $ end_date)
Bạn có thể thấy nơi này đang phát triển ... cuối cùng chúng ta có rất nhiều yêu cầu truy vấn cụ thể mà tôi cần phải thực hiện hàng tấn phương thức hoặc một số đối tượng "truy vấn" mà tôi có thể chuyển đến một -> truy vấn (truy vấn $ truy vấn) phương thức ...
... hoặc chỉ cắn viên đạn, và bắt đầu làm một cái gì đó như thế này:
- list = MyModel-> truy vấn ("start_date> X AND end_date <Y AND cấp phát = 1 AND customer_id = Z")
Có một sự hấp dẫn nhất định khi chỉ có một phương thức như vậy thay vì 50 triệu phương thức cụ thể khác ... nhưng đôi khi cảm thấy "sai" khi nhét một đống những gì về cơ bản SQL vào bộ điều khiển.
Có cách "đúng" nào để xử lý các tình huống như thế này không? Có vẻ chấp nhận được việc nhồi các truy vấn như thế vào một phương thức chung -> query () không?
Có chiến lược tốt hơn?