Я пытаюсь найти лучший (самый чистый) способ структурирования некоторого кода на C ++ для приложения, которое я создаю. Я думаю, что MVC имеет смысл как путь, но после значительного количества исследований я не совсем уверен, что делаю все правильно.
Вот пример, иллюстрирующий мой вопрос:
Модель
У меня есть класс, который содержит данные чертежа под названием Canvas
. Примером функции, используемой для очистки текущего содержимого холста, является ClearCanvas()
.
В конечном счете, я хочу, чтобы кнопка в интерфейсе могла вызывать эту функцию и очищать холст.
Контроллер
У меня есть класс контроллера для canvas: CanvasController
Контроллер создает и удерживает ссылку на объект canvas: CurrentCanvas
Контроллер также создает представление: CanvasView
и затем устанавливает ссылку на себя в представлении: CurrentCanvasView->SetControllerRef(this);
View
Представление состоит из серии вложенных классов, которые определяют пользовательский интерфейс. Например, иерархия, ведущая к рассматриваемой кнопке, может выглядеть примерно так:
CanvasView
-VerticalBox
--HorizontalBox
---Button
Во время конструктора представления ссылка на контроллер передается из представления всем интерактивным элементам, например. NewButton->SetControllerRef(this->GetControllerRef());
Кнопка нажата
Так что теперь, когда кнопка нажата, она может функционировать так:
void ClearCanvasButton::OnButtonPressed()
{
Controller->CurrentCanvas->ClearCanvas();
}
Итак, мой общий вопрос: (1) кажется ли это правильным способом ведения дел или плохо структурированным?
Также (2) : Должен ли контроллер инкапсулировать функции холста, например:
void CanvasController::ClearCanvas()
{
CurrentCanvas->ClearCanvas();
}
Так что функция на кнопке может быть просто:
void ClearCanvasButton::OnButtonPressed()
{
Controller->ClearCanvas();
}
Я просто не уверен, правильно ли по сути передавать ссылку на контроллер всем элементам представления, которые в конечном итоге хотят изменить модель, или есть более чистый способ.
Извиняюсь, если вопрос задавался тысячу раз тысячами разных способов, я искал вокруг, пытаясь понять это.