Difference between revisions of "Zope Component Architecture"

From Funtoo Linux
Jump to: navigation, search
(Created page with "This page describes the Zope Component Architecture, or ZCA for short. == What is it? == The Zope Component Architecture is a Framework that arose out of Zope 3 development,...")
 
(The Paradigm)
Line 11: Line 11:
 
== The Paradigm ==
 
== The Paradigm ==
  
In one phrase, the paradigm implemented by the ZCA framework is that of a "component architecture", which in itself may not mean anything to you, but it is easy to understand. If you are reading this, you have probably developed some Python software. Now imagine if you had to develop some large Python software as part of a team, and different members of the team had different skill sets. In order to have the team work well together, you need to break the software project into logical parts and assign smaller groups of people to work on each part separately. But when the software is complete, it needs to work together as an integrated unit.
+
In one phrase, the paradigm implemented by the ZCA framework is that of a "component architecture", which in itself may not mean anything to you, but it is easy to understand.  
  
One team's code will need to interact with another team's code. For this to work well, the teams need to define ''interfaces'' for how others can utilize their code. These interfaces are the interaction points for one team to utilize software that other teams write.  
+
If you are reading this, you have probably developed some Python software. Now imagine if you had to lead a team that is developing of a complex Python software application. This type of project presents new challenges that you may not experience as an individual developer.  
  
Quite possibly, these interfaces need to be defined before the various parts are even implemented. That way, people can go ahead and develop their part of the software with the understanding that the interfaces that their code depends upon will be available when everyone is done. Thus, everyone can work independently on their own parts and software projects can scale a lot better.
+
For one, different members a team have different skill sets. You also want the team to be able to work in parallel rather than have some members of the team sit idle waiting for parts they depend upon to be completed. Ideally, you would want to split the application into logical parts and then clearly define who is doing what part of the software and what each team is delivering. But when the software is complete, it needs to work together as an integrated unit.
  
The same approaches can be used for other types of distributed development.
+
Clearly, you will need to think about the software architecture. But it can also be helpful to have a framework your team can use that helps them to split the application into logical parts, work in parallel, and then allow these various parts to interact once they are done. This is what a component architecture is typically used for. It supports this style of development.
  
At its heart, ZCA implements mechanisms that allow this type of development to happen.
+
=== Interfaces ===
 +
 
 +
You decide to split your team into smaller groups, and each group will tackle one part of the software. One group's code will need to interact with another group's code, and many parts depend upon other parts that haven't been written yet. To solve this very chicken-and-egg problem, the groups need to define ''interfaces'' for how others will be able to utilize their code, even before it is written. These interfaces are the interaction points for one groups to utilize software that other groups write.
 +
 
 +
Now we have added an additional layer of complexity to the software development project -- the effort of defining these interfaces. But we expect the investment to reap major rewards in mere days as this model of development will allow each group to actively develop their part of the application without waiting on another group to complete theirs first.
 +
 
 +
At its heart, ZCA implements mechanisms that allow this type of development to happen. Now that you understand this, you will have a better appreciation for why ZCA is designed the way it is. It is trying to provide a framework for building larger projects that cannot be handled by a single developer. It does add some complexity to your project. This is intentional. You should only use ZCA if you expect that the additional complexity will be more than offset by improved productivity and software quality that can arise from a component-based architecture. There is no one answer to this. The right answer will depend on the complexity of the project, your development team, and other factors.
  
 
[[Category:Zope]]
 
[[Category:Zope]]
 
[[Category:Developer]]
 
[[Category:Developer]]
 
[[Category:Featured]]
 
[[Category:Featured]]

Revision as of 21:42, 31 January 2012

This page describes the Zope Component Architecture, or ZCA for short.

Contents

What is it?

The Zope Component Architecture is a Framework that arose out of Zope 3 development, and is now integrated into Zope 2. It is used by various software projects, and doesn't even require Zope to run. You can use it natively with Python. It's part of Zope, but it's not Zope.

Why Should I Use It?

You shouldn't. Well, I mean, don't use it unless you see the value in it, or if you are using a software project that uses it already. Due to the fact that it is a framework, it does impose a paradigm on how you develop Python code and you need to determine if that paradigm works for your particular situation, or if it doesn't.

The Paradigm

In one phrase, the paradigm implemented by the ZCA framework is that of a "component architecture", which in itself may not mean anything to you, but it is easy to understand.

If you are reading this, you have probably developed some Python software. Now imagine if you had to lead a team that is developing of a complex Python software application. This type of project presents new challenges that you may not experience as an individual developer.

For one, different members a team have different skill sets. You also want the team to be able to work in parallel rather than have some members of the team sit idle waiting for parts they depend upon to be completed. Ideally, you would want to split the application into logical parts and then clearly define who is doing what part of the software and what each team is delivering. But when the software is complete, it needs to work together as an integrated unit.

Clearly, you will need to think about the software architecture. But it can also be helpful to have a framework your team can use that helps them to split the application into logical parts, work in parallel, and then allow these various parts to interact once they are done. This is what a component architecture is typically used for. It supports this style of development.

Interfaces

You decide to split your team into smaller groups, and each group will tackle one part of the software. One group's code will need to interact with another group's code, and many parts depend upon other parts that haven't been written yet. To solve this very chicken-and-egg problem, the groups need to define interfaces for how others will be able to utilize their code, even before it is written. These interfaces are the interaction points for one groups to utilize software that other groups write.

Now we have added an additional layer of complexity to the software development project -- the effort of defining these interfaces. But we expect the investment to reap major rewards in mere days as this model of development will allow each group to actively develop their part of the application without waiting on another group to complete theirs first.

At its heart, ZCA implements mechanisms that allow this type of development to happen. Now that you understand this, you will have a better appreciation for why ZCA is designed the way it is. It is trying to provide a framework for building larger projects that cannot be handled by a single developer. It does add some complexity to your project. This is intentional. You should only use ZCA if you expect that the additional complexity will be more than offset by improved productivity and software quality that can arise from a component-based architecture. There is no one answer to this. The right answer will depend on the complexity of the project, your development team, and other factors.

Personal tools
Namespaces

Variants
Actions
Categories
Toolbox
Stuff