У меня очень ориентированное на данные приложение, написанное на Python / PyQt. я планирую
сделать некоторый рефакторинг, чтобы действительно отделить интерфейс от ядра, главным образом потому, что
реальных тестов пока нет, и это явно должно измениться.
Уже есть какое-то разделение, и я думаю, что я сделал несколько правильных вещей, но это далеко не идеально. Два примера, чтобы показать вам, что меня беспокоит:
Когда пользователь щелкает правой кнопкой мыши на представлении объекта данных, контекстное меню
всплывающее окно создается объектом данных, хотя этот объект данных (по существу,
ORM представление строки базы данных) явно не должно иметь ничего общего с пользовательским интерфейсом.
Когда что-то записывается в базу данных, но запись не выполняется (например, потому что запись базы данных
заблокирован другим пользователем), классическое окно сообщения «Повторить / прервать» предоставляется пользователю. это
диалог создается поставщиком данных *, хотя поставщик, очевидно, не должен иметь никаких функциональных возможностей пользовательского интерфейса.
Очевидно, что провайдер может вместо этого вызвать исключение или иным образом указать сбой, и пользовательский интерфейс может перехватить
что и действовать соответственно.
* это слово, которое я использую для объекта, который в основном представляет таблицу базы данных и является посредником
между его объектами данных и механизмом базы данных; Я не уверен, что это обычно называют
«провайдер»
У меня нет опыта в тестировании, поэтому я не легко "чувствую" проблемы с тестируемостью или тому подобное, но прежде чем начать, нужно провести некоторую реорганизацию.
Там нет сложной бизнес-логики (это в основном просто CRU D , да, даже без D), и это было бы гораздо более реорганизованным, чем переписывание, поэтому я не очень заинтересован в представлении ошибки регрессии, подобные обсужденным в этом вопросе .
Мой план состоит в том, чтобы начать рефакторинг, имея в виду, что часть пользовательского интерфейса может быть легко разорвана, чтобы быть
заменяется, скажем, веб-интерфейсом или текстовым интерфейсом вместо интерфейса Qt. С другой стороны,
Сам Qt все еще будет использоваться ядром, потому что механизм сигнал / слот используется во многих местах,
например объекты данных испускают сигнал changed
, чтобы указать, ну, вы знаете, что.
Итак, мой вопрос: возможен ли этот подход для повышения тестируемости и ремонтопригодности? Любые другие замечания, особенно с учетом Python?