getData();
void setData(int newData);
private:
int data;
};
#endif // MODEL_H
// View.h
#ifndef VIEW_H
#define VIEW_H
#include <wx/wx.h>
#include "Model.h"
class View : public wxFrame {
public:
View(const wxString& title, Model* model);
void updateView();
private:
Model* model;
wxPanel* panel;
wxTextCtrl* textCtrl;
wxButton* button;
void onButtonClicked(wxCommandEvent& event);
};
#endif // VIEW_H
// Controller.h
#ifndef CONTROLLER_H
#define CONTROLLER_H
#include "Model.h"
#include "View.h"
class Controller {
public:
Controller(Model* model, View* view);
private:
Model* model;
View* view;
};
#endif // CONTROLLER_H
// Model.cpp
#include "Model.h"
int Model::getData() {
return data;
}
void Model::setData(int newData) {
data = newData;
}
// View.cpp
#include "View.h"
View::View(const wxString& title, Model* model) : wxFrame(NULL, wxID_ANY, title), model(model) {
panel = new wxPanel(this, wxID_ANY);
textCtrl = new wxTextCtrl(panel, wxID_ANY, wxString::Format(wxT("%d"), model->getData()), wxPoint(10, 10));
button = new wxButton(panel, wxID_ANY, wxT("Изменить"), wxPoint(10, 50));
button->Bind(wxEVT_BUTTON, &View::onButtonClicked, this);
}
void View::updateView() {
textCtrl->SetValue(wxString::Format(wxT("%d"), model->getData()));
}
void View::onButtonClicked(wxCommandEvent& event) {
int newData;
textCtrl->GetValue().ToLong(&newData);
model->setData(newData);
updateView();
}
// Controller.cpp
#include "Controller.h"
Controller::Controller(Model* model, View* view) : model(model), view(view) {
view->updateView();
}
// main.cpp
#include <wx/wx.h>
#include "Model.h"
#include "View.h"
#include "Controller.h"
int main(int argc, char** argv) {
wxApp app(argc, argv);
Model model;
View view(wxT("MVC Пример"), &model);
Controller controller(&model, &view);
view.Show(true);
return app.MainLoop();
}
Такой код сгенерила gpt для паттерна mvc. Но здесь же неправильная реализация? Вьюха напрямую с моделью взаимодействует?
Вьюха и должна с моделью взаимодействовать (код не смотрел)
Разве контроллер не выступает посредником между ними? Есть разные трактовки, а как правильно?
По первому запросу в гугл, там на схеме они не взаимодействуют.
Контроллер выступает посредником только в одну сторону в сторону воздействия вьюхи на модель Вот это взаимодействие принято делать через контроллер на самом деле сейчас эти контроллеры н**** никому не нужны потому что основная их идея это абстрагировать способ отправки команды модели а современных графических системах чаще всего такая функциональность есть и без написания кода: меню, кнопки, и прочие элементы управления в графическом интерфейсе
Обсуждают сегодня