Here we go with the last brainstorm in Reflab, started from both an observation of what the (Zope3) technology allows us to do, recent product developments (such as geolocation or relations) and some works and thoughts by Martin Aspeli.
The basic idea is to rethink the concept of Content Type itself.
In a few words current idea of a content type in CMF/Plone is the sum of a data structure (the Schemata), plus some behavior (Note: the word “Behavior” is used in other technical contextes with other meaning: in this particular context meaning is purely non technical and related to what a content behaves in a CMS from the User perspective.)
A News Item has Title, Description, a preview image, a text body, etc. as main fields (data). A News Item, because of it’s type, shows in the News portlet when published, and shows it’s preview image in listing, cannot be commented, shows in searches, etc. (behavior).
An Event has Title, Description, a text body, a lot of contact information, etc. (data). An Event shows up in the calendar portlet and Events portlet when published, shows in searches, can be commented, etc. (behavior)
This are very basic examples of course, but the should alreay give the sense of it.
So the question is: why content cannot simply be “newsable” or “calendarable” or “mappable” or previewable”, etc. despite its basic structure? In fact many simple behaviors are already separated from the data structure itself.
Here is a uncomplete overview with some add-on products as well:
What I’d like to work on is on complete separation of the two (for all contents, defaults and add-ons): from the user perspective there are loads of use cases and scenarios where an extremely decoupled approach makes sense and would make the life of integrators and custom products developers a lot easier.
In fact this kind of new products development has already started: no more content patching or subtyping when you can adapt. And very interesting, tiny, small and simple products are popping up.
Still I’d like to point out that the process started from the very developer-oriented perspective and often the user and the integrator are left behind.
This is only a first braintorming on the idea, I’ll stop here for now. :)