Review: Professional Plone Development
Building robust, content-centric web applications with Plone3, an open source Content Management System
by Martin Aspeli; Packt Publishing, ISBN 9781847191984

Review sponsored by Packt through a free copy of the book

1 The author

I do not know Martin Aspeli personally. But, I am sure he is a Plone expert. As I read, he designed the archictecture of and implemented several core Plone 3 components (most prominently, the new portlets) and he played a significant part in Plone's documentation effort. I recognized Martin as one of the major contributors to the Plone cummunity, answering numerous questions and giving help in the Plone mailing lists. Occationally, we discuss there controversally. We do not always have the same opinion (as you can see in this review, too).

2 Content

The book is organized into 4 parts "Getting Ready", "Customizing Plone", "Developing New Functionality" and "Real-World Deployments".

2.1 Getting Ready

This part introduces a demanding realistic example which is later used to introduce, explain and set into perspective almost all concepts exhibited in the book. It also shows how Python/Zope3 development tools ("buildout" and "paste") can be used for Plone development leveraging work done by the community ("ZopeSkel").

2.2 Customizng Plone

This part introduces "Generic Setup" (management of configuration held in ZODB objects), Zope 3 component customization through use of layers and customization of security, workflow and skins (now apparently called "themes").

2.3 Developing New Functionality

This part introduces several core Zope and Zope3 concepts (object publishing, traversal, persistence, catalog searches, ZCML, utilities, adapters, views and events). It covers the development of new content types and introduces to Archetypes and Zope 3 "formlib". One of its chapters is devoted to the integration with relational databases -- mainly with "SQLAlchemy" (one of the prominent Object Relational Mapping frameworks for Python) and the integration product "collective.lead". Further chapters handle user management and KSS (Plone's new AJAX framework).

2.4 Real-World Deployments

This part gives hints for a safe and efficient production installation. It covers caching and virtual hosting and stresses the need to plan for future upgrades. Finally, it has a chapter on user management via LDAP.

3 Special Features

3.1 Example oriented

The book contains a carefully chosen, realistic example with full source code, continously developed and extended as the chapters proceed. Almost all concepts are introduced via the example and thus related to concrete development work

3.2 Best practices

Apparently, Martin does not only want to present facts and alternatives (and let his reader chose from the various possibilities) but wants to streamline the development in the Plone community by establishing best practices.

3.3 Test Driven Approach

The book strongly follows a test driven approach. It stresses the need for early tests and provides examples for several test szenarios.

3.4 Good structure

The book has an overall good structure. Each chapter relates its material to concrete development tasks (usually via the example), provides lots of tips and notes, often gives references for more intensive background reading and ends in a summary.

4 My Opinion

This is a good book, worth reading.

After you read it, you have a good chance to be able to build your own Plone 3 sites.

Plone 3 grew impressively complex. Plone already has been complex before Plone 3 added Zope 3 concepts. Now, most of the older CMF techniques are still there, and in addition, Zope 3 is now used for views (competing with CMF skins), form building (partly competing with Archetypes) and portlets. The book helped me to understand these complexities.

Of course, I do not like everything. I am quite critical towards "best practice" prophets. I prefer people who show me my possibilities and let me chose over those who tell me in detail how I should proceed (and call me unprofessional when I do not follow). And I do not share all of Martin's opinions. For example, I write tests after the implementation not before -- because white box tests (those that take implementation details into account) can identify edge cases much more efficiently than black box tests (those that only know the specification).

The book is highly "example driven". I am more in favour of an abstract treatment where the concepts are described abstractly and examples used to explain parts of them. But, I can imagine that most readers prefer Martin's approach...

Of course, the book is not completely error free. Martin is far more Plone expert than I am. Thus, I would not dare to find errors in the Plone part (I would think that I am probably wrong), but I found some errors in the traversal and acquisition descriptions. Martin immediately answered to look into these issues and promissed to create errata entries and improve the description for an eventual second edition -- all one can expect in the first place.

Dieter Maurer
Last modified: Mon Nov 12 17:16:02 CET 2007