Для диалогов такого рода. Я определяю его как вложенный класс FindFilesCommand. Если основной диалог используется среди многих команд, я определяю его в модуле, доступном для этих команд, и заставляю команду соответствующим образом настроить диалог.
Объектов команды достаточно, чтобы показать, как диалог взаимодействует с остальной частью программного обеспечения. В моем собственном программном обеспечении объекты Command находятся в своих собственных библиотеках, поэтому диалоги скрыты от остальной системы.
По моему мнению, делать что-либо более излишнее Кроме того, пытаясь поддерживать его на самом высоком уровне, часто приходится создавать множество дополнительных интерфейсов и методов регистрации. Много кода для небольшого усиления.
Как и в любом другом случае, рабская преданность приведет вас в странные проходы. Вы должны использовать суждение, чтобы увидеть, есть ли другие методы, которые можно использовать, когда вы получаете неприятный запах кода. Опять же, по моему мнению, диалоги должны быть тесно связаны и определены рядом с командой, которая их использует. Таким образом, пять лет спустя я могу вернуться к этому разделу кода и посмотреть все, с чем имеет дело команда.
Опять же, в тех немногих случаях, когда диалог полезен для нескольких команд, я определяю его в общем модуле для всех из них. Однако в моем программном обеспечении, возможно, 1 из 20 диалогов выглядит так. Основным исключением является диалог открытия / сохранения файла. Если в диалоге используются десятки команд, я бы прошел полный путь определения интерфейса, создания формы для реализации этого интерфейса и регистрации этой формы.
Если для вашего приложения важна локализация для международного использования, вам необходимо убедиться, что вы учитываете это с помощью этой схемы, поскольку все формы не находятся в одном модуле.