YAGNI = You Ain't Gonna Need It :)
 
You can design a perfectly usable class which has public methods defining a clean public interface without actually splitting out a full-fledged separate Interface class.  I'm -1 on using public fields, +1 on good interface (as opposed to Interface) design, but -1 on unnecessary Interface classes.  Explicit interfaces are good when you expect multiple implementations, and I don't believe this is a case like that, at least not yet.
 
As for why it's an actively good idea to get rid of them, I'll give two reasons.  The first is simplicity - it cleans up the code, shortens the list of classes a newbie needs to understand, and makes it clearer what's going on.  The second is related, but more procedural - any developer using these classes might want to trace the execution of a particular path through the code.  If everything uses the interfaces, then this stout fellow must remember to look at the implementation class to see what's actually happening, not the interface.  There are a lot of tools out there that help you trace through code, and let me tell you they're really handy.  One of the features of such tools is the ability to click on a method and zap you instantaneously to the source code for that method.  If everything uses the interface, you go there instead of to the implementation, which is rather frustrating.
 
This would be fine with me if there were actually a good reason to split out these interfaces, but I don't think there is in this case, so Occam's Razor seems to say get rid of them.  The JAX-RPC interfaces are the "real" interfaces, which are that way so that lots of different JAX-RPC implementations can implement them in a semi-portable way.  Axis' implementations of these interfaces do not, IMHO, need another layer of interface.
 
--Glen
-----Original Message-----
From: R J Scheuerle Jr [mailto:[EMAIL PROTECTED]]
Sent: Thursday, May 09, 2002 5:28 PM
To: [EMAIL PROTECTED]
Subject: RE: SerializationContext/DeserializationContext cleanup?


The interfaces define the methods for using the SerializationContext and DeserializationContext.  I don't see how this hinders development.  In fact it helps development, since it forces committers to use the interface instead of communicating via visible fields.  

I don't know what YAGNI means.  

BTW, you never did give an explanation to why you wanted to get rid of them (except your own personal convenience (?)).  Please back up your arguments or drop the discussion.  

Again +1 to KEEPING interfaces.


Rich Scheuerle
XML & Web Services Development
512-838-5115  (IBM TL 678-5115)



Glen Daniels <[EMAIL PROTECTED]>

05/09/2002 02:48 PM
Please respond to axis-dev

       
        To:        "'[EMAIL PROTECTED]'" <[EMAIL PROTECTED]>
        cc:        
        Subject:        RE: SerializationContext/DeserializationContext cleanup?

       


I guess what I'm saying is that I don't think this is a place where there is going to be any call for pluggability.  YAGNI.
 
--Glen
-----Original Message-----
From:
R J Scheuerle Jr [mailto:[EMAIL PROTECTED]]
Sent:
Thursday, May 09, 2002 3:40 PM
To:
[EMAIL PROTECTED]
Subject:
Re: SerializationContext/DeserializationContext cleanup?


Generally, separating interfaces from implementation is a good thing.


For one, it gives us the opportunity to make this a pluggable piece in the future.


Also it establishes better boundaries between the components.  Before I made these changes,

there was a lot of interactions between components using public or package visible fields.


I feel that the Context classes are a lot better off (and remain better organized) now that we have

interfaces.  I would vote -1 to removing the interfaces.




Rich Scheuerle
XML & Web Services Development
512-838-5115  (IBM TL 678-5115)


Glen Daniels <[EMAIL PROTECTED]>

05/09/2002 01:51 PM
Please respond to axis-dev

       
       To:        "'Axis-Dev (E-mail)'" <[EMAIL PROTECTED]>

       cc:        

       Subject:        SerializationContext/DeserializationContext cleanup?


     




Does anyone (Rich?) have any real reasons why we have SerializationContext and SerializationContextImpl?  I know the JAX-RPC SerializationContext is an interface we have to implement, but it seems to me we could just as easily (and much more conveniently) have axis.encoding.SerializationContext be a class instead of introducing yet another interface.

Same holds for DeserializationContext/DeserializationContextImpl.

Do you think these are useful + important points of extensibility?  Are there really going to be other implementations?

If we could coalesce these guys, that would make my life a happier place.

--Glen




Reply via email to