webネタ

技術系ブログ。web系SE。1988。♂。@rhong_

◯◯Managerクラス

[引用] http://www.radiumsoftware.com/0603.html

ふとコードベースを見回してみると,「なんとか Manager クラス」がそこら中に溢れていることに気付く。例えば ScreenManager, AnimationManager, EntityManager, TextureManager, 等々……。 "Manager" という接尾語は,「何かを管理する」という機能を表しているものと考えられるが,この「管理する」という表現は非常に曖昧な意味を持つもののように感じられる。「管理」とは,具体的には一体どのような処理を行うことを指しているのだろう?

例えばこれが "Builder" であれば,何かを生成することが目的であることが分かる。 "Pool" であれば,何かを蓄積することが目的であることが分かる。 "Registry" であれば,何かを登録することが目的であることが分かる。それでは,これら全てをまかなうクラスだとしたら? それこそ "Manager" という名前が相応しいかもしれないが,それはひとつのクラスに機能を集約し過ぎている。「ひとつのクラスが扱う問題の領域はひとつに限定する」という基本的なクラス設計の約束事を守るべきではないだろうか。

このように,クラス名に "Manager" という接尾語を用いていることは,そのクラスの設計に不備があることを暗に告げていると考えることができる。このような,クラス名から伝わってくる「兆候」 ― いわゆる "code smell" [Wikipedia] は,他にも幾つか見つけることができる。例えば "Object", "Handler", "Data" などがこれに含まれる [C2Wiki] 。これらの接尾語をクラス名に見つけたならば,そのクラスの設計を見直すことを考えた方が良いかもしれない。

そして

いろんなフレームワークでもManagerとかHandlerとかよく見るけどなぁ。

ZF2とかManagerの嵐だし。

ふーむ(´・_・`)