On Tue, 10 Dec 2002 08:50, Leo Sutic wrote:
> However, there is concensus that a component should be able to specify any
> interface that it should be able to cast the context to. That is, for every
> interface T,
>
> public void contextualize (Context context) {
> T myContext = (T) context;
> }
Slow down. I think it's very apparent from the discussions that there is
indeed *NO* consensus on this at all. That is, unless you completely ignore
the opinions of non-committers like Noel and myself on this.
This is IMHO, a very bad idea. Much better is this:
public void contextualize( Context context ) {
T myContext = (T) context.get( "container:context:T" );
}
So, a Phoenix BlockContext could be accessed as:
pulbic void contextualize( Context context ) {
String key = "phoenix:" + BlockContext.getClass().getName();
Object obj = context.get( key );
BlockContext blockContext = (BlockContext) obj;
}
Now, nothing stops Phoenix from having a BlockContext implementation that just
does:
return this;
when asked for that key. And nothing *prevents* a component from directly
casting, except that the component is then <i>tightly tied to Phoenix</i>
because this is <i>not defined in the Framework</i> contracts.
Other containers might want to provide a BlockContext, without having to tie
their *implementation* of Context to the interface, and implement the
BlockContext in a better way than IS-A. (Reusing the Phoenix implementation
fo BlockContext, but having their own Context implementation, for example. ).
So, in framework, we include in the contract definition:
"You should *never* cast the context to another interface, unless you want to
tie yourself to a single container. If a context interface is available by
casting, it will *always* also be available through a named key, defined and
documented by the container."
This way, Phoenix clients continue to work, but we don't have to use it as a
model for the way context should work.
This is Avalon4 contract tightening, I'm talking about, not Avalon5, where the
"what does a context mean? what (if anything) gets provided in the context?"
discussion still needs to take place.
--
cheers,
Darrell DeBoer
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>