Форум программистов, компьютерный форум, киберфорум
Наши страницы

Консольное меню MVC - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как изменить размер динамического массива структур после того как был добавлен товар http://www.cyberforum.ru/cpp-beginners/thread1168633.html
Подскажите как мне изменить размер динамической массива структур после того как был добавлен товар , countProduct-это и есть размер массива структур. void addProduct(int countProduct, Product...
C++ Подсчет в строке слов, состоящих только из цифр.(функция) 5. Подсчет в строке слов, состоящих только из цифр. http://www.cyberforum.ru/cpp-beginners/thread1168613.html
Исключить из числа цифры, стоящие между первой и последней цифрой числа. Использовать классы C++
Исключить из числа цифры, стоящие между первой и последней цифрой числа #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<io.h> #include<string.h> #include<iostream.h>...
Поворот avl дерева C++
Объясните пожалуйста как работает поворот бинарного дерева, прочитал ряд статей и просто не могу сообразить почему написано поворот вправо если же туда никак нельзя применить элементарные понятия...
C++ Найти сумму первых n-четных натуральных чисел (найти ошибку) http://www.cyberforum.ru/cpp-beginners/thread1168588.html
Нужно найти сумму первых n-четных натуральных чисел. Ошибка вылетает на 13 строке, должно быть я не правильно код составил, алгоритм не тот может. Помогите мне включить эту рекурсию #include...
C++ Посчитать сколько цифр в слове это моя первая программа, подскажите что тут не так #include <iostream> #include <string.h> #include <stdio.h> int main( int argc, char* argv) { int a, n, i; string k; подробнее

Показать сообщение отдельно
Bretbas
Каждому свое
348 / 118 / 31
Регистрация: 05.08.2013
Сообщений: 1,239
Завершенные тесты: 1

Консольное меню MVC - C++

06.05.2014, 22:43. Просмотров 1284. Ответов 14
Метки (Все метки)

С моего последнего проектика прошло не так уж много времени, а я вновь здесь и уже с новыми исходниками
Снова паттерны и каркас MVC, и снова я жду от вас комментариев

Итак, мой новый проект является, грубо говоря, библиотекой для создания консольного меню. То есть, Вы, как пользователь, хотите создать к примеру маленькую игрушку в консольном приложении, и вам 100% понадобится Меню для вашего серьезного проекта. Как же быть? Писать с нуля? Нет конечно, на помощь вам приходит папа bretbas!

Примечание: Меню пока что одноуровневое и нет никаких проверок на ошибки. Все это для того, чтобы было на сколько возможно легче увидеть систему MVC в моем проекте и услышать ваши комменты

Классы:
Controller - Абстрактный класс контроллера. Имеет виртуальную операцию execute() для реализации паттерна Команда(Command). Так же имеет статическую функцию initialize(...) для инициализации контроллера нужными данными, и статическую функцию run() для управления меню с пользователем.
ItemStart - Конкретный класс контроллера. Реализует операцию execute()
ItemOption - Конкретный класс контроллера. Реализует операцию execute()
ItemExit - Конкретный класс контроллера. Реализует операцию execute()

Model - Абстрактный класс модели. Реализует паттерн Наблюдатель(Observer) и является субъектом за которым следят наблюдатели.
ModelMenu - Конкретный класс модели. Знает о названии пунктов меню, о положении текущего курсора, о координатах показа меню на экране и тд. Использует функции set/get.

View - Абстрактный класс представления. Является наблюдателем в паттерне Наблюдатель(Observer), поэтому использует виртуальную операцию update(), для реализации ее в подклассах. Каждый раз, когда будет изменяться Model, будет вызвана эта операция. Так же инициализирует простейшую графику в консоле.
ViewMenu - Конкретный класс представления. Реализует операцию update(), для отображения меню на экране.


Применение:
К примеру Вы в вашем грандиозном проекте решили создать меню из 3 пунктов, а именно Start,Option,Exit. Как же Вам создать их, используя мою библиотеку?
Да очень просто!
Во-первых, нужно создать три подкласса класса Controller. Давайте назовем их ItemStart,ItemOption,ItemExit.
Во-вторых, нужно написать соответствующие действие по выбронному пункту меню правильно? А значит нужно реализовать переопределенную операцию execute() для каждого подкласса.
В-третьих, в основном коде, нужно инициализировать Модель и Представление:
C++
1
2
3
4
...
    ModelMenu   *model  = new ModelMenu();          // Создаем Модель Меню
    View        *view   = new ViewMenu(model);      // Создаем Представление Меню
...
В-четвертых, инициализируем контроллер моделью и нужными нам координатами для вывода меню на экране:
C++
1
2
3
...
    Controller :: initialize(model,40,12);          // Инициализируем Контроллер данными
...
В-пятых инициализируем каждый пункт с параметрами, которые являются названию пунктов меню:
C++
1
2
3
4
5
6
...
    Controller* item[3];                            // Создаем 3 Пункта Меню
    item[0] = new ItemStart("Start");               // Start
    item[1] = new ItemOption("Option");             // Option
    item[2] = new ItemExit("Exit");                 // Exit
...
Ну и соответственно запустим всю систему
C++
1
2
3
4
...
    Controller :: run();                            // Запуск системы
...
...
Просто? Я думаю да

А теперь я хочу чтобы вы прокоментировали мои исходники, правильно ли я разложил все на 3 полки - MVC? Или что-то нужно добавить/убрать/изменить?

Я не шел к цели, чтобы я работал на MVC. Я шел к цели, чтобы MVC работал на меня, где-то его изменить, где-то что-то убрал, но суть каркаса MVC в моей задаче НА МОЙ ВЗГЛЯД осталась та же.
Но опять же, это на мой взгляд. Так вот мне нужно узнать ваш взгляд на данную задачу Прикрепляю проект
0
Вложения
Тип файла: 7z PatternsMenu.7z (548.6 Кб, 38 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru