Mixinは有害か?
ちょっと前のときどきの雑記帖で紹介されていたMixins considered harmfulシリーズが面白そうだったので1と2を読んでみた。
- Mixins considered harmful/1
- Mixins considered harmful/2
- Mixins considered harmful/3
- Mixins considered harmful/4
以下、かんたんなまとめ。
- Mixinを使いすぎるとクラス階層が爆発して、1クラスに数百メソッドなんて状況が頻発する
- IDEのキーワード補完や、自動生成したAPIドキュメントが役立たずになる
- Mixinはフレームワーク作成者にとっては便利
- 作成者はクラスの階層・関係が頭に入っているから
- Mixinはフレームワーク利用者には不便
- フレームワークのバグや挙動を調べようと深みに入ると処理を追い切れなくなる
- 比較的小規模で品質が安定したライブラリで使うぶんにはまあ許容範囲
- しかしフレームワークは重厚長大になろうとしがちなので、そのうち罠にはまる
- Zope2はMixinに害されてしまったため、Zope3はMixinではなくコンポジションを多様した
- コンポジションは転送(Forwarding)のこと、委譲(Delegation)と似ているが少し違う
PHP界隈でも、Rails wannabeなフレームワークだと頑張って疑似Mixinを実現しているものがあるけれど、利用者からすると必ずしも嬉しいとは限らないということか。PHPだと結局マジックメソッドを駆使して実装することになるから、なおさらコードを追いづらいだろうなあ。
