I'm very new to the principle of Service Component Architecture and Zope in general, but the more I look, the more ZCA seems to be a good solution for a certain class of problems I often encounter.
I have read through most (if not all) of the
zope.component tutorials, and I'm left with the feeling that I understand the library's constructs and terminology (e.g. I understand how interfaces relate to adapters), but not how the framework, on the whole, is intended to be used.
What's more, the ZCA seems to be built around the principle of Service Component Architecture, but I don't understand how to go about employing Zope tools to implement SCA-compliant software.
My questions are as follows:
- To what extend does ZCA want me to adhere to "the SCA way of doing things"?
- What are the fundamental assumptions/concepts of SCA I need to bear in mind? (please see below for information on what I think I understand)
- What is the relationship between the Zope component registry and importing things from submodules? Is the former meant as a replacement for the latter in most circumstances?
- I think I have a problem that would benefit from the ZCA. What are the usual features of a problem that make the ZCA the correct answer?
Familiarity with Zope Constructs
I have read through the Comprehensive Guide to Zope Component Architecture, but I'm left with a feeling similar to when I learned my first programming language: I know the names of things and what they do, but I don't understand how to orchestrate all the various pieces into a useful thing.
By analogy, a python newbie might know how to define a function and make a loop, but he doesn't know how to make a program.
I read through the above guide's case study, but I frankly didn't find it very elucidating. I see how ZCA helps in that particular context, but I'm struggling to generalize.
Familiarity with Software Component Architecture
I only have a very superficial understanding of SCA, most of which stems from the Wikipedia articles on SCA and Service Oriented Architecture, along with this article from my (distant) past life as an indie game developer.
Perhaps I'm missing something crucial, here? I've been trying to reason in terms of implementing the ideas in the "Cowboy Programming" article above (the gamedev one) with ZCA, but maybe I'm only confusing myself?
A Solution in Search of Problem?
I don't want my fellow stackexchangers to think that I'm hell-bent on using ZCA for my next project. I'm not. I'm simply struggling to understand The Right WayTM of using ZCA.
Again, I'm unable to:
- generalise from the examples provided in the documentation
- imagine the high-level structure and organisation of a ZCA code base.