。私はそれをFindFilesCommandのネストされたクラスとして定義します。多くのコマンドの中で使われている基本的なダイアログが、それらのコマンドにアクセス可能なモジュールで定義されており、それに応じてダイアログを設定するコマンドがあります。
コマンドオブジェクトは、ダイアログが他のソフトウェアとどのように相互作用しているかを示すのに十分です。私自身のソフトウェアでは、Commandオブジェクトは独自のライブラリに置かれ、ダイアログはシステムの他の部分から隠されています。
何かをするには、私の意見では余計なことです。さらに、最高レベルでそれを維持しようとすると、多くの余分なインターフェイスと登録メソッドを作成することがよくあります。これは、ほとんど利益を得るためのコーディングです。
フレームワークと同様に、奴隷の献身はあなたにいくつかの奇妙な路地を導きます。あなたは悪いコードのにおいを得るときに使用する他のテクニックがあるかどうかを判断するために判断を使用する必要があります。私の意見では、ダイアログは、それらを使用するコマンドの隣にしっかりと縛られ、定義されるべきです。そうすれば、5年後に私はコードのその部分に戻り、コマンドが扱っているすべてを見ることができます。
また、いくつかの例では、ダイアログは複数のコマンドに便利ですが、すべてのコマンドに共通のモジュールで定義します。しかし私のソフトウェアではおそらく20のダイアログのうち1つがこのようなものです。主な例外はファイルのオープン/セーブダイアログです。ダイアログが何十ものコマンドで使用されている場合は、インターフェースを定義し、そのインターフェースを実装してそのフォームを登録するためのフォームを作成するという完全な道を行くでしょう。
国際化のためのローカリゼーションがアプリケーションにとって重要な場合は、すべてのフォームが1つのモジュールに含まれていないので、このスキームを使用することを考慮する必要があります。
私は[この記事](http://stackoverflow.com/a/15512972/385995)に非常によく似た質問に答えました。 –