マネージャークラスは、いくつかの理由で、悪いアーキテクチャの兆候である可能性があります。
意味のない識別子
名前FooManager
は、クラスが実際に何をするかについて何も言いませんが、それは何らかの形でFoo
インスタンスを含むことを除いて。クラスにもっと意味のある名前を付けると、その真の目的が明らかになり、リファクタリングにつながる可能性があります。
分数責任
単一の責任原則に従って、各コードユニットは1つの目的を果たす必要があります。マネージャーを使用すると、その責任を人為的に分割できます。
インスタンスのResourceManager
有効期間とResource
インスタンスへのアクセスを調整するを検討してください。アプリケーションには、インスタンスをResourceManager
取得するための単一のものがありResource
ます。この場合、ResourceManager
インスタンスの機能をResource
クラス内の静的メソッドで提供できない本当の理由はありません。
非構造化抽象化
多くの場合、マネージャーは、管理するオブジェクトの根本的な問題を抽象化するために導入されます。これが、管理者が不十分に設計されたシステムのバンドエイドとして悪用するのに役立つ理由です。抽象化は複雑なシステムを単純化する良い方法ですが、「マネージャー」という名前は、それが表す抽象化の構造に関する手がかりを提供しません。それは本当に工場なのか、プロキシなのか、それとも何か他のものなのか?
もちろん、同じ理由で、マネージャーは単なる悪以上に使用できます。EventManager
本当に-which Dispatcher
ソースと興味がターゲットに派遣してから-queuesイベント。この場合、イベントの受信と送信の責任を分離することは理にかなっていEvent
ます。個人は、出所や宛先の概念を持たない単なるメッセージであるためです。
a またはa を書くのと本質的に同じ理由でa Dispatcher
のEvent
インスタンスを書きます:GarbageCollector
Factory
マネージャーは、ペイロードが知る必要のないものを知っています。
それが、マネージャーのようなクラスを作成するための最も正当な理由だと思います。値のように動作する「ペイロード」オブジェクトがある場合、システム全体の柔軟性を維持するために、それは可能な限り愚かでなければなりません。個々のインスタンスに意味を提供するには、それらのインスタンスを意味のある方法で調整するマネージャーを作成します。他の状況では、マネージャーは不要です。
Of course, mangers can be good. An obvious example is an EventManager
はそこにそれをすべて説明すると思う。コンセプトの誤用は悪いアーキテクチャですが、正当なユースケースがあります。ほとんどすべての場合に同じことが当てはまります。