So here goes,
I mostly agree with what everyone has been saying. As I have been writing code it have not been using ZCA because I'm just not sure where it would be useful. I've been trying to think about it and plan accordingly, but, as I have discussed with Tao, it seems like we are just putting another layer of abstraction with no gain. What I mean is that so far most interfaces we define have a 1 to 1 implementation. So abstracting that interface gained us nothing other than abstraction. It seems we do a lot of "just in case of the future" trains of thought, which is very ideal, but it seems we are shooting ourselves in the foot trying to do it. Meaning, we are planning for future changes, but most likely the changes we are planning for won't occur.

Well, in case of the network layer we actually have a use case. Another one is for the pluggability of the serializer. The first allows somebody for instance to implement a separate eventlet based layer and let the library use this (and I use it internally for replacing the standard layer with a test mockup layer).

I don't see the problem with the 1:1 situation. Interfaces IMHO help to make clearer what the component is about as it distills the essentials out. That's also why I proposed this way of working: first write a doctest, then write interfaces, then implementation.


Here are my less philosophical ideas:
1) I don't think it makes sense to take out ZCA and still try to code to allow ZCA to be used at a later time. If we are going to code for ZCA, we might as well use it. The coding is much different than normal coding styles, so we can't have our cake and eat it too. 2) If we plan to stay with ZCA (which in all fairness doesn't seem like too bad of an idea) we have to identify EXACTLY which parts we think should be swappable. We don't have any design or architectural plan laid out whatsoever, we haven't identified any components. Our design plan just seems to be "GET IT DONE", and we pick up whatever IT is at the time. So, with that said, ZCA can be effectively used if we identify where we want to use it. Clearly everything shouldn't use ZCA as all things don't need to be swappable components. Maybe we should come up with some guidelines on how to decide.

As said, for me it's also about documentation and way of coding which came out of the invention of the ZCA as a side effect. At least having defined interfaces makes sense to me and does not really add that much.

3) I don't like the idea of splitting the project. The whole point of this project was to pull together all the code that was currently in place, integrate it, and expand it. Rather than having people working independently on the same thing, we should make compromises and find the best solution.

I wasn't so much talking about splitting, more adding a layer to a maybe ZCA-less library. This also would save me from always saying "see, with ZCA this now would be very easy." ;-)

4) This one is directly for Tao: to me, it seems the problem lies in the fact that we all can't see how ZCA gives us anything that using normal OO coding styles can't. I mean, most software doesn't use ZCA and they get along just fine. We have design patterns, OO design in general, and all else to make things swappable and manageable. Why so driven to use ZCA and not just design our code using GREAT OO design principles? Coding to interfaces works outside of ZCA.

Well, I have seen it happen with bigger project that OO sometimes is quite inflexible. I gave some examples of how Zope2 looked like in the end which led to a complete rewrite (and the invention of ZCA). ZCA was invented out of a need to make a framework more pluggable. And at some point you might need some registration of components so I proposed ZCA because it's a solved problem there.

Lose coupling of components as ZCA brings us is also a topic which is discussed in the software engineering scene and I at least have seen the benefits in big projects where I see the before/after state. I agree though that it shouldn't be overdone but what I mean is not that classes should not mark up their interface but instead that classes do not need to be dissected into adapters where this is not necessary. And OO is not always that pluggable, because you usually cannot simply change the superclass of some class you are using as it's all hardwired then. And even then I would btw. propose to add interface definitions to those classes to make clear for the user what the interface actually is. It's less clutter then than doing it inside the code.

But as said, I will let you decide and maybe getting rid of ZCA might also help me to spend my nights again with something else than defending it and solving bugs :-) And if it helps to gain more developers, that's ok as well.

-- Christian

--
Christian Scholz                         video blog: http://comlounge.tv
COM.lounge                                   blog: http://mrtopf.de/blog
Luetticher Strasse 10                                    Skype: HerrTopf
52064 Aachen                              Homepage: http://comlounge.net
Tel: +49 241 400 730 0                           E-Mail [EMAIL PROTECTED]
Fax: +49 241 979 00 850                               IRC: MrTopf, Tao_T

neue Show: TOPFtäglich (http://mrtopf.de/blog/category/topf-taglich/)

_______________________________________________
Click here to unsubscribe or manage your list subscription:
https://lists.secondlife.com/cgi-bin/mailman/listinfo/pyogp

Reply via email to