Khi nào nên sử dụng ModelAndView vs Model trong Spring?
Điều này nghe có vẻ ngu ngốc đối với các chuyên gia trong Spring
nhưng tôi phải hỏi. Làm thế nào để bạn quyết định khi nào nên sử dụng ModelAndView
so với Model
?
Sau tất cả, tôi đã nghiên cứu câu trả lời tốt nhất mà tôi đã tìm thấy là cái này . Nó đã đề cập rằng ModelAndView
là một cách cũ và Model
với String
được trả về là một cách mới trong Spring
.
Câu hỏi của tôi là chúng ta có nên từ chối ModelAndView
cũ bây giờ khi chúng ta có Model
trong tay không? Hoặc có bất kỳ trường hợp nào bạn cần sử dụng ModelAndView
cho nó.
Ngoài ra, có ai biết tại sao phải thay đổi giá trị ModelAndView
thành Model
và String
thành View
không, và lợi ích là gì?
Tôi luôn sử dụng cách tiếp cận trong đó các phương thức điều khiển trả về ModelAndView
. Đơn giản là vì nó có xu hướng làm cho các phương thức điều khiển ngắn gọn hơn một chút. Các tham số phương thức hiện là các tham số input
đúng. Và tất cả dữ liệu liên quan output
được chứa trong đối tượng được trả về từ phương thức.
Kiểu ModelAndView
dường như cộng hưởng với những người không thích cập nhật các tham số đầu vào thành một phương thức. Dựa vào niềm tin rằng điều này sẽ tạo thành một tác dụng phụ, một kiểu nguy hiểm vì bạn không thể dự đoán một cách đáng tin cậy phương thức sẽ làm – Nó có thể trả về dữ liệu trong đối tượng được trả về hoặc nó có thể cập nhật bất cứ điều gì trong bất kỳ đối số đầu vào nào.
Vì vậy, một số người vẫn sẽ tiếp tục thích ModelAndView
.
Kiểu mới với Model
làm tham số phương thức và trả về chuỗi dưới dạng tên xem. Có vẻ như đến từ một phương pháp thiết kế hơi khác nhau. Ở đây, các đối tượng mô hình được coi là một loại sự kiện hoặc các mục được truyền cho nhiều trình xử lý, trước khi được đưa trở lại khung nhìn nơi chúng được hiển thị. Nó nhắc nhở tôi cách xử lý các sự kiện trong thế giới AWT/Swing. Mô hình này phù hợp hơn với cách tiếp cận trong đó nhiều trình xử lý có thể xây dựng trên đầu của các đối tượng Model
, cho đến khi nó đạt đến tầm nhìn.
Vì vậy, vào cuối ngày, dường như không có một lý do rõ ràng nào để chỉ trích hoặc thúc đẩy một trong hai cách tiếp cận. Bạn nên sử dụng phong cách cảm thấy phù hợp hơn với triết lý thiết kế tổng thể của bạn.
Một điểm khác biệt tôi có thể nhận thấy là với đối tượng ModelAndView, bạn có thể đặt tham chiếu trực tiếp đến đối tượng xem:
ModelAndView mav = ...
mav.setView(myView);
Trong khi đó, nếu bạn sử dụng Model và String, bạn cần một trình phân giải khung nhìn để phân giải tên khung nhìn thành một khung nhìn thực tế
public String myHandler(...) {
return "myviewname"; // has to have a resolver from "myviewname" into an actual view
}
Trong phối cảnh SEO, Chúng tôi có thể sử dụng ModelAndView để áp dụng chuyển hướng 301 nếu chúng tôi có bất kỳ yêu cầu nào về điều đó, Chúng tôi không thể đạt được điều này bằng Mô hình.
@RequestMapping("/")
public ModelAndView AWBCOntroller() {
log.info("Tracking info");
ModelAndView mav = new ModelAndView();
mav.setViewName("index");
return mav;
}
Leave a Reply