Trong MVC, sự khác biệt giữa bộ điều khiển và bộ định tuyến là gì?


19

Chúng có nghĩa tương tự (gắn URL vào hành động hoặc hành động với URL) hoặc tôi có thiếu sự khác biệt nào không?

Ví dụ: http://github.com/dannyvankooten/PHP-Router so với http://konstrukt.dk


1
bộ định tuyến đó nghe giống như một proxy được tôn vinh đối với tôi
ratchet freak

Bạn chỉ cần một mô hình (cơ sở dữ liệu), bộ điều khiển (là bộ định tuyến) và chế độ xem (một trang). Đó là nó. Nếu bạn có Bộ định tuyến và Bộ điều khiển thì bạn đã quá phức tạp và chỉ sử dụng Bộ định tuyến để truyền dữ liệu đến Bộ điều khiển. Bộ điều khiển là Bộ định tuyến, nhưng Bộ định tuyến không phải là Bộ điều khiển. Xem tại đây code.tutsplus.com/tutorials/mvc-for-noobs--net-10488
tập một

Câu trả lời:


15

Bộ định tuyến:

Định tuyến là quá trình lấy điểm cuối URI (phần đó của URI đi sau URL cơ sở) và phân tách nó thành các tham số để xác định mô-đun, bộ điều khiển và hành động nào của bộ điều khiển đó sẽ nhận được yêu cầu.

Điều khiển:

Bộ điều khiển thực hiện »Mẫu điều khiển, trong đó tất cả các yêu cầu bị chặn bởi bộ điều khiển và được gửi đến các Bộ điều khiển hành động riêng lẻ dựa trên URL được yêu cầu (đó là yêu cầu định tuyến từ Bộ định tuyến).


4

Một Frontend-Controller nên cộng tác với một Router và một Dispatcher quyết định dựa trên yêu cầu (HTTP) so với ứng dụng mà cụ thể hành động phải được thực hiện và sau đó công văn nó.

Tùy thuộc vào cách trình bày chi tiết một thiết kế là, một số điều khiển của công việc mà không Router s và họ làm việc định tuyến của mình hoặc định tuyến là tiềm ẩn trong thiết kế cách yêu cầu được xử lý.

Một số Dispatcher s cũng vượt qua một yêu cầu đối tượng để các cử phương pháp hành động . Các Phương thức hành động sau đó tự phân tách Yêu cầu một phần để ngay cả các hành động của Trình điều khiển vẫn có thể thực hiện một số định tuyến dựa trên yêu cầu. Một ví dụ điển hình cho trường hợp này là trường hợp khi một khung đề nghị thực hiện chuyển hướng làm phản hồi. Điều này cũng cho thấy mức độ liên quan hoặc gần Bộ định tuyếnBộ điều khiển .

Sự khác biệt thường được rút ra ở đây là việc định tuyến đảm nhiệm hoặc giúp xác định phương thức hành động nào sẽ thực hiện và bộ điều khiển sau đó chịu trách nhiệm cung cấp hành động này nhưng cả hai đều xử lý yêu cầu.

Như bạn có thể thấy, sự khác biệt giữa Bộ định tuyếnBộ điều khiển có thể khác nhau rất nhiều giữa việc triển khai và khung. Cuối cùng, ứng dụng cụ thể có nhu cầu cho dù mức độ trừu tượng nhất định có hữu ích hay cản trở.

Tuy nhiên, từ các điều khoản tôi muốn nói rằng Bộ điều khiển có vai trò cao hơn trong ứng dụng tổng thể. Đây là nơi hành động để nói.


3

Tuyến đường ánh xạ một URL tới một bộ điều khiển, đó là hành động. Đôi khi các vai trò không thực sự tách biệt rất tốt tùy thuộc vào khung.


2

Bộ định tuyến là một phần của lớp điều khiển. Cơ chế xử lý bộ định tuyến là sự thay thế của mẫu Front Controller cũ (công tắc lớn trong index.php).

Trong một khung hiện đại, một bộ định tuyến xác định một kết nối trực tiếp giữa một "loại" yêu cầu có thể và bộ xử lý của nó. Ngược lại, bộ điều khiển chỉ nhận dạng thông tin và phân tích dữ liệu này trong ngữ cảnh của chính nó.


0

Khá đơn giản là một bộ định tuyến thực hiện một hành trình thông qua ứng dụng, thường dựa trên các đầu vào bên ngoài như các biến GET hoặc POST.

Tuy nhiên, Bộ định tuyến không phải là một phần của MVC, một số khung MVC và HMVC sử dụng bộ định tuyến, nhưng điều này không liên kết chúng với mô hình của MVC.

Ngoài ra, một số triển khai sớm của MVC mà tôi đã thấy thực sự dựa vào việc phân tách các hành động dựa trên tệp với một tệp cho mỗi bộ điều khiển để truy cập các bộ điều khiển riêng biệt. Điều này phục vụ ứng dụng tốt hơn nhiều, bởi vì có bộ điều khiển mỏng, với các mô hình mạnh hơn, bạn không bao giờ phải cuộn đến một phương thức cụ thể trong bộ điều khiển và do đó bạn có thể truy cập logic ở một nơi (mô hình), cho phép bạn kết hợp hành vi.


-1

Các bộ định tuyến

yêu cầu

và quyết định phương thức điều khiển / điều khiển nào sẽ xử lý yêu cầu.

Bộ điều khiển chấp nhận các yêu cầu và xử lý nó!

Bây giờ tôi cũng đã tạo bộ điều khiển phân tách url và sử dụng phần đầu tiên sau url cơ sở làm bộ điều khiển và phần thứ hai làm hành động. Điều này tải một tệp tương ứng với bộ điều khiển và một phương thức trong tệp đó tương ứng với hành động.

Đây không thực sự là một bộ điều khiển (theo như MVC có liên quan) nó là một phần của định tuyến.

Ví dụ: lấy [GET] uri: example.com/article/view/123 Bộ định tuyến MVC sẽ phân tích cú pháp của uri và tìm các phân đoạn sau

Chế độ xem bài viết 123 Theo mặc định, hầu hết các bộ định tuyến bây giờ sẽ khởi tạo bài viết Trình điều khiển và gọi phương thức xem của nó chuyển qua 123 làm tham số. (Bạn có thể có một số phương thức getUriSegment (SegIdx), đó là một lựa chọn thiết kế cho khung của bạn.)

ArticleControll sẽ có một phương thức xem với tham số $ articleId. Phương thức này có thể sẽ làm một cái gì đó như: lấy bài viết được chỉ định (ví dụ từ db thông qua một mô hình) và sau đó hiển thị nó (có thể bằng cách trả về một khung nhìn đã được đưa ra bởi bài viết mà mô hình trả về

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.