On Tue, Apr 19, 2005 at 05:31:59PM +0200, Martijn Faassen wrote:
How would you deal with the flexibility requirements that these systems have, though?I have no idea what these requirements are.
Someone builds some web app or framework/app, for instance, a CMS.
Now someone else wants to extend or change the behavior of this app. For instance, someone wants to add a new page to document objects in a CMS, that contains some textual summary information (Word count, say). Other people do not want or need this functionality however, so they don't want to see this page.
A more low level scenario could be modifications to the way URI traversal works (you hook in another adapter that knows how to look up a subobject), without having to change the core framework.
However, I do think that, if your implementation requires infrastructure that builds a whole new object model on top of Python, that may be a good clue that the implementation should be done in some other language than Python.
What new object model are you talking about? I mean, adapters and views (they're very similar, views provide user interfaces, and adapters developer interfaces). They're well established design patterns. Looking up a view or adapter in some registry is also fairly common. I see this scattered all across the Zope-based CMS I helped build, Silva, wherever we needed the flexibility (which was typically customer project driven, very real world all). I see them everywhere; views for content objects, metadata set mapping to content objects, XML importer/exporter to content objects, different behavior for binary content based on the mime type (such as showing different icons), and I'm sure there's more I'm forgetting..
All Zope 3 (which I know a lot better than Twisted) does with its adapter system is provide a uniform, flexible way to register these adapters and views and then later look them up, instead of having hand-written registries and different lookup APIs growing all across the system.
Are you suggesting I switch to a language with, say, multi-methods instead, or is there another pattern to accomplish this kind of extensibility in Python that you favor?
Regards,
Martijn _______________________________________________ Web-SIG mailing list Web-SIG@python.org Web SIG: http://www.python.org/sigs/web-sig Unsubscribe: http://mail.python.org/mailman/options/web-sig/archive%40mail-archive.com