> From: Noel J. Bergman [mailto:[EMAIL PROTECTED]]
>
> > 1. (String)context.get( "name.key" );
> > 2. ((NameContext)context).getName();
>
> As I believe I have repeatedly pointed out, these are not
> equivalent.
>
> This extends to objects that provide services, not just
> simple data types. IMO, the access mechanism provided to
> components should be DECOUPLING from implementations, not
> COUPLING via inheritance.
In what way does (2) have stronger coupling? Since there is logical
equivalence between having a "name.key" entry and a NameContext
interface:
Context has a "name.key" entry <-> Context implements NameContext
There is no stronger coupling, as I see it. I could even argue that (2)
has less coupling, as you access items via type-safe accessors instead
of a type-unsafe map, giving (2) two advantages:
+ return type is checked by compiler. (The (String) cast can't)
+ name of method is checked by compiler. ("name.key" isn't)
Part of this effort is to see if it is possible to get away from the
hyper-abstract interface Context interface we have now. After all,
since we don't design our objects like this:
public class MyClass {
public Object performOperation (Object op) { ... };
}
There is no need to have a:
public interface Context {
public Object get (String);
}
for bean-like objects.
/LS
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>