6381b14763
svn path=/plone.app.discussion/trunk/; revision=26892
78 lines
3.1 KiB
Plaintext
78 lines
3.1 KiB
Plaintext
=============================================
|
|
plone.app.discussion architectural principles
|
|
=============================================
|
|
|
|
This document outlines architectural principles used in the design of
|
|
plone.app.discussion.
|
|
|
|
Discussion items have a portal_type
|
|
This makes it easier to search for them and manage them using existing
|
|
CMF and Plone UI constructs.
|
|
|
|
Discussion items are cataloged
|
|
It should be possible to search for discussion items like any other
|
|
type of content.
|
|
|
|
Discussion items are subject to workflow and permission
|
|
Moderation, anonymous commenting, and auto approve/reject should be
|
|
handled using workflow states, automatic and manual transitions, and
|
|
permissions.
|
|
|
|
Discussion items are light weight objects
|
|
All discussion item objects should be as light weight as possible.
|
|
Ideally, a discussion item should be as lightweight as a catalog brain.
|
|
This may mean that we forego convenience base classes and re-implement
|
|
certain interfaces. Comments should not provide the full set of dublin
|
|
core metadata, though custom indexers can be used to provide values for
|
|
standard catalog indexes.
|
|
|
|
Optimise for retrival speed
|
|
HTML filtering and other processing should happen on save, not on render,
|
|
to make rendering quick.
|
|
|
|
Settings are stored using plone.registry
|
|
Any global setting should be stored in plone.registry records
|
|
|
|
Forms are constructed using extensible z3c.form forms
|
|
This allows plugins (such as spam protection algorithms) to provide
|
|
additional validation
|
|
|
|
Discussion items are stored in a BTree container
|
|
This allows faster lookup and manipulation
|
|
|
|
Discussion items are accessed using a dict-like interface
|
|
This makes iteration and manipulation more natural. Even if comments are
|
|
not stored threaded, the dict interface should act as if they are, i.e.
|
|
calling items() on a comment should return the replies to that comment
|
|
(in order).
|
|
|
|
Discussion items are retrieved in reverse creation date order
|
|
Discussion items do not need to support explicit ordering. They should
|
|
always be retrieved in reverse creation date order (most recent for).
|
|
They can be stored with keys so that this is always true.
|
|
|
|
Discussion items do not need readable ids
|
|
Ids can be based on the creation date.
|
|
|
|
Discussion items send events
|
|
The usual zope.lifecycleevent and zope.app.container events should be
|
|
fired when discussion items are added, removed, or modified.
|
|
|
|
Outstanding questions
|
|
---------------------
|
|
|
|
* Should comments use the 'talkback' URL structure currently used in CMF,
|
|
or a ++comments++ namespace?
|
|
|
|
* Should discussion items be stored in one container, maintaining parent
|
|
pointers as references or attributes, or in a nested structure?
|
|
|
|
- it may be possible to use the navtree algorithm to turn a search of
|
|
comments into a nested structure
|
|
|
|
* How can we ensure that discussion items are not removed from the catalog
|
|
when the user initiates a "clear and rebuild"?
|
|
|
|
* Can we find a way to avoid having to explicitly migrate all existing
|
|
comments?
|