На мой взгляд, эта идея нарушает три принципа: (1) избегать преждевременной оптимизации, (2) принцип наименьшего удивления и (3) слишком тесная связь данных с пользовательским интерфейсом.
Кажется, что вы оптимизируете время, но сколько времени? Если отображение рассматриваемой формы требует очень много времени или ресурсов, то да, вероятно, неплохо сделать то, что вы предлагаете. Но вообще говоря, шаблон создания окна и его уничтожения, когда пользовательский интерфейс больше не требует, чтобы оно было видимым, является проверенной временем практикой. Кроме того, когда окно не видно, оно все равно занимает память. И если это окно зависит от таких вещей, как дескрипторы файлов или соединения с базой данных, это потенциальный источник ошибок.
Принцип наименьшего удивления означает выполнение действий ожидаемыми способами для всех пользователей системы, включая конечных пользователей, специалистов по сопровождению и разработчиков. Шаблон, который вы описываете, необычен и, следовательно, может вызвать больше проблем, чем того стоит.
Другая причина, по которой следует избегать этой практики, заключается в том, что она нарушает дух широко используемого шаблона проектирования Модель-Представление-Контроллер, который отделяет сам объект от задачи отображения или изменения объекта. Есть очень веские причины для использования этого шаблона проектирования, и даже если вы этого не сделаете, философия, стоящая за ним, хороша. Существование объекта обычно не зависит от какого-либо объекта пользовательского интерфейса и, следовательно, должно существовать отдельно от пользовательского интерфейса. Например, объект «Клиент» существует независимо от того, отображается ли окно, относящееся к этому «Клиенту». Слишком тесная связь данных с объектами пользовательского интерфейса часто приводит к созданию хрупкого кода, который трудно изменить.
Если вы решите реализовать это, я бы посоветовал не создавать слишком много таких скрытых окон и попытаться свести их к минимуму, и в этом случае код Майкла Буэна кажется элегантным решением проблемы.
person
Jim Raden
schedule
13.01.2009