2

私のプロジェクトには、ドキュメント管理システムがあります。基本Documentクラスといくつかの派生クラスがあります。DocumentManagerドキュメントを開く/閉じる/アクティブにする操作を管理するクラスもあります。

およびそのDocument派生クラスは、ロード、クローズなどの際に何かを実行する必要がある場合がありますが、状態の変更はマネージャー クラスによって制御されるため、現在、クラスによって呼び出されるクラスにはOnLoaded()、などの (仮想) メソッドがあります。これらのメソッドを公開する必要がないように思われることを除けば、問題なく動作します。OnClosed()DocumentDocumentManager

別の設計は、DocumentManagerクラス起動イベントを作成し、各Documentインスタンスをこれらのイベントにサブスクライブすることです。私見では、大きな違いはありませんが、メモリリークのリスクが生じます。

私は、これらのどれもが「解決策」ではなく、問題に対するベスト プラクティスがあると直感的に感じています。誰か教えてください。

4

1 に答える 1

2

プロジェクトの特定の要件を知らずに確認するのは難しいですが、私の直感は、DocumentManagerおそらくクラスのサブクラスにあるはずのロジックがクラスにあるということDocumentです。

Documentpublicとメソッドを持つ(潜在的に抽象化された)基本クラスをload想像しますclosewhatever各サブクラスは、特定の要件に従ってこれらのメソッドを実装するためDocument、ロジックを変更することなく、任意の数のサブクラスを簡単に作成できますDocumentManagerポリモーフィズムを参照)。これらの操作が非同期の場合、Documentクラスはイベントをディスパッチして、完了したことを通知DocumentManagerします。

これにより、インスタンスのコレクションを管理する(私が想定している)DocumentManager単一責任が残ります。Document

于 2012-10-18T20:59:45.503 に答える