Как спроектировать программу, чтобы GUI и логика программы были разделены - PullRequest
0 голосов
/ 31 августа 2010

Я начинаю делать свою первую C-программу через GTK +.Я до некоторой степени выучил C и работал с PyGTK, поэтому у меня есть приличное понимание обоих.Но я никогда не создавал программу с графическим интерфейсом на C. Хотя она работала, моя последняя программа с графическим интерфейсом была немного беспорядочной, потому что логика программы была полностью смешана с интерфейсом GUI.Я читал, что лучше всего писать GUI и логику программы отделенным образом, чтобы при переключении библиотек GUI это было бы довольно безболезненно.

Это правильно?Допустим, я добавляю элемент в визуальный список.Есть ли у меня функция, которая добавляет элемент в логический список и запускает его в функции, которая просматривает этот список и затем обновляет графический интерфейс?

Например,

void new_item_button_handler()
{
  add_item_to_array() /* Code dealing with program logic*/
  /*
   * Code here to look at array and update visual list using GUI commands
   */
}

Что такоеобщий процесс для этого?

Любой совет будет оценен!

РЕДАКТИРОВАТЬ:

Спасибо за совет относительно MVC.Не могли бы вы объяснить это в контексте приведенного мною примера?Там много информации о MVC, и я с трудом пытаюсь выяснить, как это применимо к моему примеру кода здесь.

Ответы [ 2 ]

2 голосов
/ 31 августа 2010

традиционно это решается с помощью шаблона MVC. однако, если вы не дисциплинированы, вы увидите, что бизнес-логика проникает в ваш уровень представления.

спроектируйте структуру вашего пакета как можно лучше, чтобы все аккуратно вписывалось в пакеты моделей, представлений и контроллеров. убедитесь, что у вас хорошо определены интерфейсы для обмена данными между пакетами. Приложите все усилия, чтобы спроектировать пакеты таким образом, чтобы каждый отдельный пакет был тестируемым и в большинстве случаев пригодным для использования без зависимости от другого 2.

Я бы также посоветовал вам взглянуть на схему МОК. это поможет при соединении всех ваших пакетов. это также поможет во время тестирования, когда вам нужно смоделировать некоторые классы-заглушки для тестирования 1 пакета независимо от другого 2. IOC - это «проводка» вашего приложения, позволяющая смешивать и сопоставлять объекты.

2 голосов
/ 31 августа 2010

Я думаю, вы ищете шаблон проектирования Model-View-Controller .

...