Я работаю над настольным приложением в PyGTK и, похоже, сталкиваюсь с некоторыми ограничениями моей файловой организации. До сих пор я структурирован мой проект так:Как я могу упорядочить модули для настольного приложения PyGTK?
- application.py - имеет основной класс приложения (наиболее функциональные подпрограммы)
- gui.py - имеет слабосвязанные реализации графического интерфейса GTK. Ручки сигналов обратных вызовов и т.д.
- command.py - имеет командную строку функции автоматизации не зависящую от данных в классе приложения
- state.py - имеет класс данных состояния сохраняемости
Это послужило достаточно хорошо пока, но на данный момент application.py начинает становиться довольно длинным. Я просмотрел множество других приложений PyGTK, и они, похоже, имеют сходные структурные проблемы. В какой-то момент первичный модуль начинает становиться очень длинным, и нет очевидного способа разбить код на более узкие модули, не жертвуя ясностью и объектной ориентацией.
Я подумал о том, чтобы сделать GUI основным модулем и иметь отдельные модули для подпрограмм панели инструментов, подпрограмм меню и т. Д., Но в этот момент я считаю, что потеряю большую часть преимуществ ООП и получаю все, ссылки - все сценарии.
Должен ли я иметь дело с очень длинным центральным модулем или есть лучший способ структурирования проекта, чтобы мне не приходилось так много полагаться на браузер классов?
EDIT Я
Итак, точка, принятых в отношении всех вещей MVC. У меня есть грубое приближение MVC в моем коде, но, по общему признанию, я мог бы получить некоторый пробег, дополнительно разделив модель и контроллер. Тем не менее, я читаю документацию python-gtkmvc (которая, кстати, отличная находка, спасибо за ссылку), и мое впечатление заключается в том, что она не решит мою проблему так, как просто ее формализовать. Мое приложение - это один файл с полянами, как правило, одно окно. Поэтому, независимо от того, насколько сильно я определяю роли MVC в модулях, у меня все еще будет один модуль контроллера, который будет делать все, что у меня есть сейчас. По общему признанию, я немного расплывчатый в правильной реализации MVC, и я собираюсь продолжать исследования, но мне не кажется, что эта архитектура собирается получить больше материала из моего основного файла, просто переименуйте его файл на контроллер.py.
Должен ли я думать о отдельных парах Controller/View для отдельных разделов окна (панель инструментов, меню и т. Д.)? Возможно, это то, чего я здесь не хватает. Похоже, это то, о чем говорит С. Лотт в своем втором пункте.
Спасибо за ответы.