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. Но здесь же неправильная реализация? Вьюха напрямую с моделью взаимодействует?
                  
                  
                
Вьюха и должна с моделью взаимодействовать (код не смотрел)
Разве контроллер не выступает посредником между ними? Есть разные трактовки, а как правильно?
По первому запросу в гугл, там на схеме они не взаимодействуют.
Контроллер выступает посредником только в одну сторону в сторону воздействия вьюхи на модель Вот это взаимодействие принято делать через контроллер на самом деле сейчас эти контроллеры н**** никому не нужны потому что основная их идея это абстрагировать способ отправки команды модели а современных графических системах чаще всего такая функциональность есть и без написания кода: меню, кнопки, и прочие элементы управления в графическом интерфейсе
Обсуждают сегодня