Вопрос: Я создал консольную прогу, которая открывает ini-файл, забирает данные из секции 1 и возвращает обработанные данные в секцию 2, а затем выводит результат (из секции 2). Чтобы воспользоваться программой, нужно открыть Ini-файл и написать значения в секцию 1. Затем запустить файлик программы. (то есть, вместо параметров командной строки, мы эти параметры (значения функций) записываем в ini-файл). Далее, я создал GUI. Обычную фору с эдитами и кнопкой. Открываем GUI программу, заполняем эдиты. По нажатию на кнопку, значения из эдитов записываются в ini файл. Следующим шагом идет функция ShellExecute (которая выполняет мою консольную программу, которая в итоге, как мы помним, записывает результат работы в секцию 2 и закрывается). И третьим шагом, моя GUI программа связывается с INI-файлом и забирает значения отработавшей программы и помещает их в другие эдиты. Вопрос! Я правильно разделил логику программы и GUI? У меня получилась работающая консольная прога и работающая GUI прога. Правильно так делать или есть другие способы? Знаю, что есть MVC и другие.... P.S. Предыдущая твоя прога CyclePlayer хороша, но я вдруг осознал, что время в 1 секунду слишком большое. Оказывается мне нужны миллисекунды. Но думаю я разберусь. Спасибо.
Ответ: По моему это слишком сложно и неэффективно, можно поступить по-другому.
1) Даже разделяя логические части не очень большой программы (такие как, например, движок и графика) не обязательно отделять их в разные файлы: может оказаться достаточно просто писать код отдельно (например, используя библиотеки - файлы Unit, подключаемые в секции Uses).
2) При желании можно скомпилировать часть кода в DLL (Dynamic Link Library).
Как это будет работать: вместо той консольной программы будут подключаться dll-файл и импортироваться его функции. Далее их можно будет использовать, вызывая в основной программе.
Если будет сейчас время - напишу код примера. А пока что есть английская википедия.
P.S. Скоро выложу в виде статьи код циклического плеера + расскажу там как добиться большой точности.
Добавил: Дмитрий |