Bộ điều khiển có nên truyền dữ liệu đến một khung nhìn trong mẫu MVC không?


11

Tôi làm việc với ASP.NET MVC (và các triển khai MVC dựa trên web khác) khá thường xuyên, nhưng đây là điều tôi chưa bao giờ chắc chắn: Có nên điều khiển và xem giao tiếp không?

Tất nhiên bộ điều khiển nên chọn chế độ xem nào sẽ được sử dụng, nhưng ý tôi là bộ điều khiển nên truyền dữ liệu cho chế độ xem? Theo tôi, nếu chế độ xem đang mong đợi dữ liệu từ bộ điều khiển, thì chúng có hiệu quả gắn liền với nhau như một cặp (bộ điều khiển, chế độ xem). Thay vào đó, tôi thường có khung nhìn giao tiếp với chính mô hình và độc lập với bất kỳ bộ điều khiển nào.

Tôi có cách tiếp cận đúng không, hay đây là trường hợp không có ai trả lời đúng? Câu trả lời có thay đổi khi làm việc trên web so với các môi trường khác không? Câu trả lời có thay đổi khi bạn có khái niệm về một khung nhìn được gõ mạnh (như trong ASP.NET MVC) hay không?


Đây là chữ "M" trong "MVC" dành cho - Model - đại diện cho dữ liệu được truyền từ Bộ điều khiển sang Chế độ xem.
Jay Sullivan

Câu trả lời:


7

Bộ điều khiển chuẩn bị dữ liệu sẽ tiếp tục được chuyển đến dạng xem để hiển thị / hiển thị. Nó cũng chấp nhận dữ liệu đầu vào của người dùng thông qua cơ chế đăng ký xuất bản hoặc tương tự. Kiểm tra sơ đồ đầu tiên trên Wikipedia hoặc trang web của Martin Fowler để biết thêm thông tin về MVC.

nếu chế độ xem đang mong đợi dữ liệu từ bộ điều khiển, thì chúng thực sự được gắn với nhau dưới dạng cặp (bộ điều khiển, chế độ xem).

Mặc dù một khung nhìn thường chấp nhận dữ liệu, nhưng trong hầu hết các khung MVC, nó không phụ thuộc vào các bộ điều khiển cụ thể. Ví dụ, các ngoại lệ là họ JavaServer Faces. Nói chung, các khung như Rails, Django hoặc Spring MVC cho phép bạn tách rời các khung nhìn từ các bộ điều khiển bằng cách truyền dữ liệu (bối cảnh, thường là bản đồ / từ điển / túi) cho một khung nhìn (trong đó chế độ xem là một triển khai của mẫu xem mẫu ).

Câu trả lời có thay đổi khi bạn có khái niệm về một khung nhìn được gõ mạnh (như trong ASP.NET MVC) hay không?

Việc ngôn ngữ lập trình của bạn có được gõ mạnh hay không không ảnh hưởng đến cách tổ chức ứng dụng của bạn.


Những loại dữ liệu đang được chuẩn bị và thông qua? Lấy một ví dụ đơn giản: hiển thị một bài viết bằng ID của nó. Đây có phải là ID được thông qua sau khi xác minh (nó có thể không trỏ đến một bài viết) hay bộ điều khiển có nhận được bài viết từ cơ sở dữ liệu và chuyển qua đó không?
Andy Hunt

Nếu bạn chỉ vượt qua ID thì chế độ xem của bạn không thực hiện nhiều công việc hơn kết xuất? Nó sẽ phải lấy dữ liệu mà có lẽ không theo tinh thần của mẫu.
Giàn khoan

1

Đôi khi câu hỏi bạn đang thảo luận trong nhóm của tôi. Chúng tôi tranh luận về hai cách tiếp cận, cả hai đều có nhược điểm và ưu điểm.

Đầu tiên, lập luận rằng bộ điều khiển có thể cập nhật khung nhìn theo mẫu sau. Nó lắng nghe cả GUI và các sự kiện mô hình. Khi một sự kiện GUI xảy ra, nó sẽ thực thi hành động cần thiết trong mô hình, lần lượt kích hoạt và sự kiện. Bây giờ bộ điều khiển thường cập nhật khung nhìn với dữ liệu cần thiết.

Cách tiếp cận thứ hai, lập luận rằng chính khung nhìn đang lắng nghe các sự kiện mô hình và tự cập nhật dữ liệu được gắn vào sự kiện hoặc bằng cách truy vấn mô hình.

Trong cách tiếp cận đầu tiên, bạn có nhiều sức mạnh hơn cho bộ điều khiển thực sự kiểm soát mọi thứ đang diễn ra trên ứng dụng của bạn. Sức mạnh để quyết định cách cập nhật chế độ xem theo sự kiện nào trong tay anh ấy và theo cách này bạn đang giữ quan điểm của mình trong sạch. Tuy nhiên, như bạn đã nói, theo cách này, bạn có quan điểm và bộ điều khiển được ghép nối.

Trong lần thứ hai, bạn đang tách chúng ra nhưng quan điểm của bạn thực sự đang kiểm soát chính nó theo một cách nào đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.