Hatena::Groupangelos

Angelos in Action RSSフィード

Fork me on GitHub
 | 

2009-09-23

roleを使ったときにわかりにくくなるケース

10:10 | roleを使ったときにわかりにくくなるケース - Angelos in Action を含むブックマーク はてなブックマーク - roleを使ったときにわかりにくくなるケース - Angelos in Action roleを使ったときにわかりにくくなるケース - Angelos in Action のブックマークコメント

今回のプラグインでroleを使う話とは関係ないのですが、role一般の話で、「roleを使ったときにわかりにくくなるケース」は、以下の二つになるのかなぁとtokuhiromさんらと話していて感じました。

  • roleをwithする側のクラスのコードを読んでいて、そのクラスにないメソッドがある場合に、どのroleに実装が書いてあるのかを調べるのが大変。roleが細かくわかれてると、特にこれが面倒になると。
    • 委譲にすれば、委譲先がコードとしてわかるのでおいやすくなると
  • aroundなどを使って拡張すると、どこで拡張されているのが拡張される側からみえないのでわかりにくい
    • これはhook pointが明示されていないからわからないという話で、hook pointを明示するべきという話に落ちるのかなぁと

# _buildやhandlesはMooseの仕様の問題でroleの話とは関係ないので上記では割愛してます。_build_*とかでbuilderを明示せずに書く書き方はよくないだろうなぁというのと、handlesも行数は減りますが、どこに委譲するのかがコードの流れの中からは消えるので、わかりにくくなるというのはわかります。仕様はimplicitよりexplicitであるべきで、Mooseの仕組みをわかってないとコードが読めないというのでは読みにくいだろうなぁというのは思うので、より明示的に書くべきなのだろうなぁと。

# roleの使用は適切に!という話で、roleを使う事自身が悪ではないです、というのを念のため補足しておきます

See also: コメント欄

http://angelos.g.hatena.ne.jp/dann/20090920/1253471666

# kazuhoさんの、「Interfaceは双方向の契約であるべき」というコメントは双方のケースを表すいい表現だなぁ。

  • 実装継承では継承する側が何をしなければいけないかがわかるべきだし、使う側では継承した実装がどこから継承した者かはすぐにわかるべき
  • hook pointもhook pointを設定する側とhookする側とで、双方向で契約として仕様がわかるようにすべき

という話なのかなぁと。実装継承の話は、今のRole(Trait)の仕組みでは難しいので委譲に頼るしかないかもしれないですが、hookについては別の方法があるだろうなぁと。

 |