Tôi đang nghiên cứu mẫu thiết kế Model-View-Controller và tôi hiểu khái niệm đằng sau mẫu lý thuyết, nhưng tôi muốn xem qua cách thực tế sẽ đưa nó vào thực hành.
Wikipedia đề cập đến Wt - Bộ công cụ Web, CppCMS và một số triển khai tiêu chuẩn khác sử dụng mẫu, tuy nhiên tôi đã không quen thuộc với điều này, và tôi chỉ hy vọng và sẽ thực sự biết ơn nếu có ai có thể cung cấp một số mã mẫu (hy vọng C++) thực hiện mô hình và giải thích lý thuyết về mô hình được đưa vào thực hành.Mẫu View Controller Design Mã mẫu Ví dụ
Trả lời
Dưới đây là một ví dụ nhanh tôi đã thực hiện (không cố gắng biên soạn nó, cho tôi biết nếu có lỗi):
class Button; // Prewritten GUI element
class GraphGUI {
public:
GraphGUI() {
_button = new Button("Click Me");
_model = new GraphData();
_controller = new GraphController(_model, _button);
}
~GraphGUI() {
delete _button;
delete _model;
delete _controller;
}
drawGraph() {
// Use model's data to draw the graph somehow
}
...
private:
Button* _button;
GraphData* _model;
GraphController* _controller;
};
class GraphData {
public:
GraphData() {
_number = 10;
}
void increaseNumber() {
_number += 10;
}
const int getNumber() { return _number; }
private:
int _number;
};
class GraphController {
public:
GraphController(GraphData* model, Button* button) {
__model = model;
__button = button;
__button->setClickHandler(this, &onButtonClicked);
}
void onButtonClicked() {
__model->increaseNumber();
}
private:
// Don't handle memory
GraphData* __model;
Button* __button;
};
Bỏ qua việc thực hiện các Button, về cơ bản chương trình này sẽ sử dụng GraphGUI để hiển thị một biểu đồ sẽ thay đổi khi nhấn nút. Giả sử đó là biểu đồ dạng thanh và nó sẽ cao hơn.
Vì mô hình độc lập với chế độ xem (nút) và bộ điều khiển xử lý giao tiếp giữa hai thiết bị, điều này tuân theo mẫu MVC.
Khi nút được nhấp, bộ điều khiển sửa đổi mô hình thông qua chức năng onButtonClicked, mà lớp Button biết để gọi khi được nhấp. Vẻ đẹp của điều này là do mô hình và chế độ xem hoàn toàn độc lập, việc thực hiện mỗi mô hình có thể thay đổi đáng kể và nó sẽ không ảnh hưởng đến bộ điều khiển khác, bộ điều khiển có thể chỉ cần thực hiện một vài thay đổi. Nếu mô hình trong trường hợp này tính toán một số kết quả dựa trên một số dữ liệu cơ sở dữ liệu, sau đó nhấp vào nút có thể gây ra điều này xảy ra, nhưng việc thực hiện nút sẽ không phải thay đổi.Hoặc, thay vì nói với bộ điều khiển khi một nhấp chuột xảy ra, có thể nó có thể báo cho bộ điều khiển khi nút được kết nối. Các thay đổi tương tự được áp dụng cho mô hình, bất kể những gì đã kích hoạt các thay đổi.
Trình soạn thảo văn bản đơn giản có thể được thiết kế dựa trên MVC. Hãy nghĩ về lớp string
làm mô hình, nơi dữ liệu được lưu trữ. Chúng tôi có thể có một lớp được gọi là SimpleTextView
hiển thị văn bản trong số string
được đính kèm với nó, giống như vậy. Một lớp được gọi là KeyboardEventHandler
có thể hoạt động như bộ điều khiển. Bộ điều khiển sẽ thông báo cho chế độ xem về các sự kiện bàn phím mới. Chế độ xem lần lượt sửa đổi mô hình (như thêm hoặc xóa văn bản). Các thay đổi trong mô hình được phản ánh trên tất cả các khung nhìn được đính kèm với nó. Ví dụ: có thể có một chế độ xem khác được gọi là HtmlView
được gắn vào đối tượng string
được điều khiển từ bên trong SimpleTextView
. Nếu người dùng nhập các thẻ HTML hợp lệ vào số SimpleTextView
, thì HtmlView
sẽ hiển thị đầu ra được định dạng - thời gian thực.
Có một vài ví dụ MVC đầy đủ, cùng với phần thảo luận, trong phần 2 giới thiệu về lập trình bằng Python 3.x mà tôi đã viết (Tôi chưa hoàn thành ch 3, v.v.) - Cộng đồng Python thực sự thích bầy tức giận của ong khi phát hiện ra tôi đã viết rằng Python có lẽ không thích hợp để phát triển quy mô rất lớn, do đó rất khó để có được phản hồi hợp lý). Nó có sẵn ở định dạng PDF từ Google Docs. Tôi không biết làm thế nào nó bản đồ để thực hiện MVC phổ biến, tôi đã được chủ yếu là quan tâm đến việc có ý tưởng chung trên. . :-)
Cheers & hth,
PS: Có một bảng tốt đẹp của nội dung trong file PDF nhưng Google Docs không hiển thị nó. Bạn cần phải dl và sử dụng Foxit hoặc Acrobat hoặc một số trình xem PDF khác. Tôi nghĩ rằng có một TOC có thể xem riêng biệt tại Google Documents, tuy nhiên, chưa kiểm tra và không nhớ có cập nhật hay không.
PPS: Quên đề cập đến, ví dụ xử lý hình ảnh MVC gần cuối có hình ảnh đẹp của Lena Söderberg! :)
Mã là cách tiếp cận tốt nhất để hiểu và học hỏi Model View Controller:
Dưới đây là một ví dụ JS đơn giản (từ Wiki)
/** Model, View, Controller */
var M = {}, V = {}, C = {};
/** Model stores data */
M.data = "hello world";
/** View controls what to present */
V.render = (M) => { alert(M.data); }
/** Controller bridges View and Model */
C.handleOnload =() => { V.render(M); }
/** Controller on Windows OnLoad event */
window.onload = C.handleOnload;
Đây là một bài chi tiết trong C/C++ Model-View-Controller Explained in C++
- 1. Đi mẫu ví dụ
- 2. Ví dụ hay về Mẫu MVVM
- 3. chuyển các mẫu ví dụ khác để tạo mẫu email
- 4. Ví dụ mẫu C++ variadic Ví dụ bất thường
- 5. Mẫu PHP - Dịch vụ/Mẫu/Mapper/Ví dụ về Dao?
- 6. Ví dụ về mẫu tạo OpenCV
- 7. Ví dụ mẫu lệnh WPF tùy chỉnh
- 8. ví dụ ứng dụng Model-View-Presenter tại nodejs
- 9. Ví dụ mã hóa JavaScript
- 10. onFocusThay đổi mã ví dụ?
- 11. Thiết kế Clojure Model-View-Controller (MVC)
- 12. Model-View-Controller trong JavaScript
- 13. Triển khai Model-View-Controller đúng cách
- 14. Giải thích mẫu Mặt tiền với ví dụ C++?
- 15. ASP.NET MVC2 - Ví dụ mẫu Binder tùy chỉnh
- 16. Django - Cách nhận url quản trị từ ví dụ mẫu
- 17. Cần các ví dụ/mẫu RDLC (Báo cáo) tốt
- 18. Ứng dụng ví dụ về GUI/ứng dụng mẫu nào?
- 19. Thực hiện ví dụ mẫu hộp cát Javascript
- 20. HDF5 Ví dụ mã
- 21. Làm cách nào để sử dụng trình tạo mã mẫu (ví dụ: freemarker) trong Maven?
- 22. Ví dụ về mã có thể tải xuống cho các mẫu thiết kế OOP trong .NET?
- 23. MVP (Model View Presenter) hoặc MVC (Model View Controller)
- 24. Tiêm xây dựng Silverlight vào View Model + Design Mode
- 25. Hiểu View Controller làm tổ trong iOS
- 26. Tìm kiếm ví dụ về mẫu lệnh cho giao diện người dùng
- 27. Đổi tên/refactoring một View Controller
- 28. asp.net MVC part view controller action
- 29. Ví dụ về các ví dụ điển hình
- 30. iOS 5 Storyboards - Quay trở lại với Initial View Controller
Trong MVC, chế độ xem thường không nhận thức được Bộ điều khiển. Thông thường, Controller sẽ nhận thức được Model và View, và sẽ cung cấp View với thể hiện thích hợp của Model. Mô hình, như bạn đã đề cập, không biết về Chế độ xem. –
@ Matt, robdev: Mô hình không biết gì về chế độ xem nhưng Mô hình có thể gắn kết Chế độ xem cập nhật trong dữ liệu của nó .. (sử dụng điển hình mẫu quan sát) –
@Matt, tôi thấy quan điểm của bạn, nhưng trong ví dụ này, chế độ xem không hiển thị t một cách rõ ràng biết về bộ điều khiển. Nó chỉ được đưa ra một đối tượng và con trỏ hàm và nói "bất cứ ai bạn đang có, tôi đã chỉ cần nhấp vào Gọi chức năng của bạn", và onButtonClicked() sau đó được gọi là. – robev