Trong một vài dự án MVC mà tôi đang nghiên cứu, rõ ràng là có một vài bộ điều khiển có vấn đề đã phát triển thành các lớp Thiên Chúa - mỗi vị thần trong miền của họ, nếu bạn muốn.Bộ điều khiển Thiên Chúa - Cách ngăn chặn chúng?
Câu hỏi này có thể là vấn đề 'đi đâu', nhưng tôi nghĩ đó là một câu hỏi quan trọng liên quan đến SRP (Nguyên tắc trách nhiệm đơn), DRY (Đừng lặp lại) và giữ mọi thứ ngắn gọn " nhanh nhẹn "- và tôi không đủ kinh nghiệm (với mô hình này và trong thiết kế chung) để có kiến thức về điều này.
Trong một dự án, chúng tôi có một NutritionController. Theo thời gian nó phát triển bao gồm những hành động này (nhiều với mình, GET, POST, và DELETE phương pháp):
Index (home controller) ViewFoodItem AddFoodItem EditFoodItem DeleteFoodItem ViewNutritionSummary SearchFoodItem AddToFavorites RemoveFromFavorites ViewFavorites
Sau đó, chúng ta có một ExerciseController, mà sẽ bao gồm nhiều hành động tương tự, chẳng hạn như tìm kiếm và hành động yêu thích. Chúng có nên được tái cấu trúc thành bộ điều khiển riêng của chúng sao cho nó giống như vậy?
SearchController {
SearchExercise
SearchNutrition
//... etc
}
FavoritesController {
ViewNutritionFavorites
AddToNutritionFavorites
AddToExerciseFavorites
EditNutritionFavorites
EditExerciseFavorites
//... etc
}
Dường như với tôi rằng nếu bạn chia chúng thành các bộ điều khiển riêng biệt, bạn sẽ tăng phụ thuộc lớn ở mức độ nào đó để xử lý thông tin bạn cần. HOẶC bạn sẽ có một ứng dụng xử lý hoàn toàn chung sẽ rất khó xử lý vì bạn sẽ phải nhảy qua rất nhiều vòng để có được hiệu ứng mong muốn của bạn (ở mức M, V hoặc C).
Tôi đang nghĩ về điều này một cách sai lầm? Ví dụ, tôi nên có một đối tượng yêu thích chung chung và sau đó để cho bộ điều khiển quyết định xem cái gì để ném nó vào?
* Xin lỗi vì đánh vần ra các từ viết tắt - Tôi đang làm như vậy trong trường hợp bất cứ ai khác đi qua câu hỏi này và là tránh khỏi thất bại như những gì những thứ đó là
EDIT: Tất cả các logic tôi thực hiện là xử lý khá nhiều trong các lớp dịch vụ. Ví dụ, bộ điều khiển sẽ gửi FoodItem 'mới' vào dịch vụ. Nếu nó đã tồn tại, hoặc có một lỗi với nó, dịch vụ sẽ bong bóng nó trở lại với bộ điều khiển.
Vì vậy, tôi sẽ lặp lại những điều tương tự cho Bài tập hoặc thêm chúng vào các bộ điều khiển đó? I E. sẽ SearchController xử lý các phương pháp SearchExerciseItem, hoặc đó sẽ là một bộ điều khiển khác như SearchExerciseController? – MunkiPhD
Nếu đó là cách bạn thiết lập nó, tìm kiếm là một hành động ON bộ điều khiển, không phải là bộ điều khiển tại thời điểm này. Là tìm kiếm một cái gì đó chung, nó có thể là bộ điều khiển riêng của nó sau đó. Tôi đã sửa đổi câu trả lời của mình để phản ánh điều này. – Soviut
MVC làm việc với REST theo cách rất tự nhiên: Tất cả các bộ điều khiển của bạn "điều khiển" một loại tài nguyên và biết cách thực hiện các hành động khác nhau trên tài nguyên đó (tức là trả lời các thông điệp khác nhau được chuyển đến tài nguyên đó) đối với các kiểu thực thể kiểu miền chủ yếu là một đối một (đó là điểm có mô hình miền). – yfeldblum