ApplicationImpl


まずは、ValueBinding、MethodBindingを疎結合にするように
書いてます。


既存のJSF実装では、ValueBinding、MethodBindingを
交換することが考慮されていません。
JSF1.1ではそれでよかったかもしれないですが、
JSF1.1←→1.2のコンパチ狙いなので、それでは困ります。


なので、ナチュラルにDIに管理させます。
が、しかしBindingのexpressionが渡されるのが
createValueBinding(String expression)が呼ばれるときなので、
ValueBindingのクラス名を管理するContextクラス(ぶっちゃけDTO)を作って、
そいつをApplicationImplにDIしてやることにしました。


イメージ的には、こんな感じ。なんてことないですね。
ValueBindingContextImpl impl ValueBindingContext{
setValueBindingName()
getValueBindingName()
createValueBinding()
}



Application自体もDIから取り出すので、そこで
createValueBinding(String expression)は、くっついてきた
Contextに委譲って感じです。
(Cacheするなら、Contextの中またはAOPでCacheさせます。
YAGNIかもしれないので、今はやってません。)


JSF1.2のRIでは、最終的にValueExpression to ValueBindingの
Adapterを作ってます。多分Teedaでもやると思いますが、
あくまでDI管理で。


P.S.そもそも、faces-configで色々なクラス(ie. ApplicationFactory, ViewHandler...)を管理するのに
なぜValueBinding、MethodBindingとかは無いのか、それが
わからんち(?o?)です