Вопрос может быть сложным (из-за его природы или моего способа его описания), поэтому действительно прочитайте это, прежде чем отвечать.
У меня есть это приложение, чтобы написать:
а) настольное приложение;
b) нет уровня данных в смысле базы данных, файлов или любого другого хранилища (нет необходимости сохранять, хранить или загружать данные);
в) в приложении будут реализованы некоторые алгоритмы вычислений (генетический алгоритм);
б) предоставляет графический интерфейс, который будет отображать элементы управления для приложений и результатов вычислений.
Я думаю об использовании шаблона MVC, но у меня есть сомнения, как его использовать. Поскольку у меня нет уровня данных в смысле (например) базы данных (данные генерируются во время выполнения на основе пользовательского ввода), я обеспокоен способом использования MVC в этой реализации. До сих пор я придумал два подхода:
GUI - это вид. Генетический алгоритм является контроллером. GeneticAlgorithmResults - это Модель (как класс, который хранит только данные). Основной поток:
- Вид отправляет пользовательский ввод в контроллер;
- Контроллер обрабатывает пользовательский ввод и генерирует данные;
- Контроллер отправляет сгенерированные данные в Модель;
- Модель уведомляет Представление о новых данных;
- Вид извлекает новые данные и обновляет дисплей.
GUI - это вид. AppEngine - это контроллер. Генетический алгоритм и Генетический алгоритмРезультаты являются моделью. Теперь у нас есть:
- Вид отправляет пользовательский ввод в контроллер;
- Контроллер обрабатывает вводимые пользователем данные и отправляет управляющие сигналы на модель.
- Модель обновляет свое внутреннее состояние (генерирует новые данные);
- Модель уведомляет Контроллер о новых данных;
- Контроллер извлекает данные в модель;
- Контроллер обрабатывает данные;
- Контроллер отправляет обработанные данные в View;
- Вид обновляет дисплей.
Первый подход кажется более простым и более похожим на MVC. Проблема заключается в том, что в модели должна присутствовать некоторая логика - решить, когда следует уведомлять модель, так как будут отображаться не все обновления данных, или, возможно, отображение будет обновляться наборами данных, а не каждым небольшим изменением. Эти решения будут основаны на пользовательском вводе. Более того, перед фактическим отображением может потребоваться дополнительная обработка данных. Это было бы в представлении.
С другой стороны, второй подход кажется более сложным и выглядит так, как будто много сообщений передается для достижения цели. Но он дает полный контроль над логикой контроллеру и разделяет обязанности вида, контроллера и модели (что является основной целью MVC).
Какой подход вы бы порекомендовали? Или, может быть, я должен смешать их и использовать архитектуру первого подхода с потоком связи из второго подхода? Или какой-то другой дизайн?