Tại sao decouple xem và bộ điều khiển (web)?


8

Tại sao chúng ta không thể đặt chúng trong cùng một trang, như mỗi hành động được ghép nối với chế độ xem của nó? Không sử dụng đảo mã, nhưng mã điều khiển ở trên rồi xem mã ở phía dưới? Các vấn đề với phương pháp này là gì?

Theo MVC, tôi đang đề cập đến các khung như ASP.NET MVC và Ruby on Rails, và tôi có ấn tượng rằng V và C thực sự là lớp UI.

Câu trả lời:


5

Lý do tại sao chúng thường được tách rời là vì bạn muốn chế độ xem của bạn sử dụng bộ điều khiển để có được mô hình của bạn. Nhưng kiến ​​trúc sẽ cho phép bạn thay thế một khung nhìn bằng một khung nhìn khác mà không phải thay đổi logic nghiệp vụ (tức là mô hình đối tượng hoặc cách các đối tượng đó được truy xuất).

Bằng cách không buộc trực tiếp bộ điều khiển của bạn vào chế độ xem, sau này tôi sẽ dễ dàng thêm các chức năng khác như nhập / xuất có thể sử dụng trực tiếp bộ điều khiển / mô hình mà không cần phải dựa vào bất kỳ giao diện người dùng nào.

Một lợi thế khác của việc đẩy càng nhiều mã càng tốt ra khỏi UI là bởi vì các UI khó kiểm tra đơn vị hơn nhiều so với lớp nghiệp vụ phía sau chúng. Bằng cách tách càng nhiều càng tốt ra khỏi chế độ xem, bạn có thể viết các bài kiểm tra đơn vị nhiều hơn nữa để đảm bảo bộ điều khiển / mô hình và logic ứng dụng của bạn là chính xác.


Để nhập / xuất, bạn hoàn toàn không cần một chế độ xem, vì vậy không có gì để tách rời. Để kiểm tra, bạn vẫn có thể chạy kiểm tra logic trên hành động / chế độ xem, vấn đề duy nhất tôi thấy là tải mã xem mà bạn không cần kiểm tra, nhưng bạn có thể khắc phục điều đó một cách dễ dàng.
Andy

Để nhập / xuất, bạn hoàn toàn không cần xem, trừ khi bộ điều khiển của bạn được tách rời khỏi chế độ xem của bạn, tại sao bạn muốn thực thi mã xem khi nhập / xuất thậm chí không thể dựa trên web. Ngoài ra, ngay cả với các trang web, bạn có thể có nhiều chế độ xem trong cùng một mô hình (nghĩa là trang asp khác nhau, lớp khác nhau), nếu bạn không tách rời bộ điều khiển của mình, bạn sẽ sao chép mã đó trong các chế độ xem khác nhau.
DXM

Nếu không có chế độ xem, sẽ không có chế độ xem, bất kể tách rời hay không.
Andy

Tôi nghĩ rằng câu hỏi của bạn là "tại sao bộ điều khiển tách rời khỏi chế độ xem". Nếu nhập / xuất cần truy cập bộ điều khiển để có được mô hình đối tượng, làm thế nào nó có thể làm điều đó mà không cần khởi tạo chế độ xem của bạn? Không tách rời, bất kể ai đó có hiển thị HTML hay không, bạn đang khởi tạo mã xem. Hay bạn đề nghị sao chép mã điều khiển bên trong chức năng nhập / xuất?
DXM

1
Bài đăng gốc của bạn: "Tại sao chúng tôi không thể đặt chúng vào cùng một trang" - vì vậy bạn có trang asp.net hiển thị HTML và trình bày dữ liệu mô hình của bạn. Trong trang này, bạn đã ghép VC của bạn thành một lớp. Bây giờ bạn nhận được một yêu cầu rằng ứng dụng của bạn cần hỗ trợ nhập / xuất (không phải từ trang này, chỉ nói chung). Nếu một logic nhập / xuất hoàn toàn riêng biệt cần truy cập vào bộ điều khiển, thì nó lấy từ đâu? Hay bạn đang dự định đưa toàn bộ ứng dụng của mình vào cùng một lớp Trang? Điều gì nếu bạn muốn chạy xuất ngoại tuyến (tức là cục bộ trên hộp máy chủ bên ngoài máy chủ web)?
DXM

4
  • Bộ điều khiển xử lý logic kinh doanh có thể thay đổi theo thời gian và Chế độ xem có thể không thay đổi, theo yêu cầu.

  • Ngược lại ở trên cũng đúng.

  • Nhà thiết kế và nhà phát triển cần có khả năng làm việc trên cùng một dự án một cách độc lập.

Một bài đăng hay: http://mashable.com/2011/11/12/designer-collaboration-strargeties/

  • Toàn bộ hệ thống trở nên dễ bảo trì hơn. Việc giải quyết các lỗi trở nên dễ dàng hơn với phương pháp tách rời.

  • Các tiêu chuẩn web với các công nghệ mặt trước đang thay đổi với tốc độ nhanh. Hãy tưởng tượng một tập đoàn quyết định chuyển tất cả các công nghệ mặt trước sang HTML5, Dart, v.v. Có một Chế độ xem và Trình điều khiển được ghép nối sẽ là một cơn ác mộng!


Đầu tiên và đối với hầu hết, logic kinh doanh nên có trong mô hình. Thứ hai, view có đầy đủ các mã như foreach và helpers, một nhà thiết kế đồ họa chắc chắn sẽ không muốn đối phó với điều đó. Nếu anh ta muốn giải quyết vấn đề đó thì anh ta thực sự là một lập trình viên UI, mà bộ điều khiển là một phần của mối quan tâm của anh ta. Đối với HTML5, hầu hết HTML được xây dựng từ cơ chế bố cục, trình trợ giúp HTML và chế độ xem một phần (giống như trình trợ giúp), do đó, thực sự không quan trọng cho dù chế độ xem có được ghép hay không, bạn không sửa đổi chế độ xem cho HTML5 .
Andy

@Andy Youy yêu cầu phân biệt giữa C và V ... Từ quan điểm đó, C xử lý logic nghiệp vụ, vì nó xử lý các mô hình.
yannis

3

Bạn không cần phải tách hai khóa học. Nhưng nếu khung nhìn và bộ điều khiển độc lập thì bất kỳ giao diện người dùng nào cũng có thể được sử dụng. Ví dụ: bạn có thể sử dụng bộ điều khiển thông qua bảng điều khiển, ổ cắm, web hoặc giao diện máy tính để bàn. Nói cách khác, bạn có thể tăng sử dụng lại mã.


Tôi đã đề cập đến phát triển web, trong đó UI thực sự là chế độ xem và bộ điều khiển được kết hợp, vì vậy bạn không thể thực sự trao đổi chỉ chế độ xem với giao diện người dùng mới.
Andy

3
@Andy - chắc chắn rằng bạn có thể, bạn có thể quyết định rằng bạn muốn có một ứng dụng iOS và ứng dụng Android gốc cho trang web mà bạn đang phát triển. Thay vì phải làm lại từ đầu, bạn chỉ có thể thực hiện cuộc gọi đến bộ điều khiển của mình và sau đó có chế độ xem riêng trên thiết bị iOS / Android, do đó sử dụng lại bộ điều khiển.
Jetti

@Jetti đó là một điểm tốt.
Andy
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.