uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

Groovy/Grailsの限界らしきもの、1つ

こないだd:id:uehaj:20080228:1204194784を書いてて思ったのは、Grailsではフレームワーク内のコードをカスタマイズするのに限界があるなあと。

最初フィールドの表示を変えるのに、

org.codehaus.groovy.grails.commons.GrailsClassUtils#getNaturalName(String name)

あたりを差し替えればいいかと思った*1んだけど、Grailsフレームワーク自体のJava部分のコードをGroovy側で、ユーザコード側で差し替える方法が思いつきませんでした。「JavaクラスにGroovyメソッドを追加する」はmetaClassやカテゴリで何とかなるし、「GroovyメソッドをGroovyメソッドで差し替える」も当然可能と思うのですが、「JavaメソッドをGroovyで差し替える」つうのは確かできない*2

この点、Rails/Rubyではフレームワーク側だろうとなんだろうとオープンクラスでガンガン書き換えられるので、便利は便利です。

JavaとGroovyの使い分け」は、前に書いたように有用な手法だとは思うのですが、「変わりにくいところが本当に未来永劫変わらないか?」は神ならぬ人間にとっては判断するのが難しいところです。

なお、「JavaのメソッドのGroovyによる置き換え」は別に今のGroovy処理系ができないだけで、将来可能になるかもしれないので、上は本質的な批判にはなってないかも知れません(現状の実装に対する批判でしかないかもしれません)。また、私のような、考え不足で下手な改造をしようとする輩に対する防御策として機能しているので、まあ良し悪しといったとこでしょうか。

*1:最終的には、上を差し替えるのはもともと筋の悪い方針だとわかった(ブラウザのaccept languageで変えるべきだからViewサイドでいじるべき話で上のような根幹で小細工すべきではない)ので、これができないから問題だというつもりではなく、この調査を通じて気づいたこと、ということです。

*2:Springに含まれているAspectJを使えばなんとかなるのかな?