Модель C ++ MVC - Как это должно быть реализовано? - PullRequest
5 голосов
/ 30 июля 2009

Я немного сбит с толку относительно того, как модель должна «работать» в моей базовой реализации на C ++, или, скорее, как данные из, скажем, бэкэнда базы данных должны быть инкапсулированы / работать с ним.

В настоящий момент я думаю о модели, в которой, например, используется статический метод findById (), который будет возвращать экземпляр той же модели, который затем будет представлять одну «строку» данных (допускает манипуляции и т. Д. И т. Д.). будь подходящим подходом.

С точки зрения создания новой строки в базе данных, я предполагаю, что будет создан новый экземпляр модели, заполненный данными, и, фактически, метод save (), называемый?

Надеюсь, я на правильных линиях, но я немного запутался по поводу реализации / дизайна здесь.

Любой совет будет принят с благодарностью.

Спасибо заранее, Джеймс

Ответы [ 2 ]

4 голосов
/ 30 июля 2009

Итак, я думаю, что вы спрашиваете, какой интерфейс подойдет для «перевода» между реляционной базой данных и объектно-ориентированным приложением, особенно в контексте приложения MVC, написанного на C ++.

Общий подход называется объектно-реляционным отображением, или ORM . Я только знаком с тем, как Ruby on Rails реализует ORM, но если вы перенесете его в C ++, это будет выглядеть так:

  • Таблица базы данных отображается на класс
  • Операции над таблицей (например, запросы) отображаются на статические функции-члены соответствующего класса
  • Строки в таблице соответствуют экземплярам соответствующего класса
  • Поля в таблице соответствуют переменным-членам соответствующего класса

Вероятно, есть библиотеки C ++, которые могут сделать для вас отображение ORM. Я сам не знаком ни с кем, поскольку мне никогда не приходилось делать это на C ++.

Редактировать: Этот вопрос задает о библиотеках ORM для C ++.

1 голос
/ 30 июля 2009

Первый совет: книга «Банда четырех» - шаблоны дизайна от Gamma et al. Это объясняет MVC и другую необходимую модель: наблюдатель.

Википедия также может помочь.

В основном: модель представляет данные и возможности манипулировать ими. Это класс. Модель не должна знать вид или контроллер. Он должен иметь возможность уведомлять других об изменениях, не зная их (например, шаблон наблюдателя, сигналы в qt). Представление отображает данные и реагирует на изменения. Он регистрируется в качестве наблюдателя для модели и в большинстве случаев знает модель (не нужно там отделяться). Несколько представлений могут использовать одну и ту же модель. То же самое для контроллера. В большинстве современных пользовательских интерфейсов представление и контроллер тесно связаны, иногда даже с одним и тем же объектом (например, с помощью ползунка, показывающего значение и в то же время изменяющего его при перемещении).

По историческим причинам: lern Smalltalk (например, Cincom Smalltalk).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...