[Zope-dev] ZPatterns design questions
Steve Spicklemire
steve@spvi.com
Fri, 6 Oct 2000 20:43:55 -0500 (EST)
>>>>> "pje" == Phillip J Eby <pje@telecommunity.com> writes:
>> - Propertysheets: You don't expressly say that Shared needs to
>> be a 'Common Instance Property Sheet'.
pje> Actually, if it's intended to be shared across all instances,
pje> there seems to me to be little reason to have it in the
pje> ZClass; you might as well define the properties as constants
pje> using SkinScript. However, if you want to have defaults that
pje> an application integrator will be able to override without
pje> actually subclassing, then you want Shared to be a DataSkin
pje> Property Sheet, so that they will have the option of
pje> overriding your defaults with SkinScript or another attribute
pje> provider.
Yeah.. now that I think about it a little more clearly, it makes
sense to define this in the Specialist itself. This way all the instances
in a ToDoManager would share the same set of 'doers', but different
ToDoManagers could keep their own custom set.
>> - I'm trying to reconcile PJE's methodology of Domain Logic,
>> Presentation Logic, Data Management Implementation Logic, and
>> User Interface Implementation Logic. Can you (or Phillip) label
>> each of the DTML methods as to which category they fall into?
>> And state why, even if it seems obvious?
pje> In the ZClass:
pje> index_html - presentation, because it displays things the
pje> object knows
pje> editInstanceForm - presentation, because it is strictly
pje> display
pje> editInstance - primarily domain, but mixes some presentation
pje> in. If instead of displaying an OK button, it just did a
pje> redirect, I'd consider it a pure domain. Note, by the way,
pje> that it's not wrong to mix the two, it's just usually more
pje> reusable to keep presentation code out of domain methods if
pje> you want to be able to call them from code or XML-RPC and
pje> such.
Good! This is the kind of feedback I need! So.... I can pass in
a redirection URL so that the domain code can work in different
environments easily.
pje> In the Specialist (btw, stric:
pje> index_html: UI implementation, because it implements a
pje> non-object specific UI (i.e. "display all to-do's").
pje> newToDoForm: UI implementation, because it's a non-specific
pje> object UI.
pje> addNewToDo: DM implementation, polluted by a bit of UI. :)
pje> It implements the data management aspect of creating a new
pje> instance. It calls the Specialist's newItem() method, but it
pje> could have directly called a newItem() method on one of the
pje> Specialist's Racks, or done something else to create the
pje> instance.
pje> deleteInstances: DM implementation, again with a touch of UI.
pje> It implements the data management aspect of creating a new
pje> instance. Instead of doing manage_delete on each item, this
pje> could have been implemented as an SQLMethod that did a DELETE
pje> WHERE operation using the id's that were given (if the data
pje> store was an SQL database, of course).
OK.. I'll go back and try to 'clean out' the UI pollution to
illustrate that separation better.
>> - How does this product (simple though it is) exemplify the
>> RIPP approach?
pje> I'm not sure that you can say it *exemplifies* the RIPP
pje> approach, although it certainly goes along with that
pje> approach. My hesitation is mainly that it doesn't really
pje> show any of RIPP's major benefits, which are associated with
pje> framework re-use and integration. For that, you really need
pje> to have more than one kind of object, with some kind of
pje> collaboration taking place.
Hmm.. can anyone thing of a good collaboration 'partner' for
a simple ToDo list? If it's not too complex.. I'd be happy to
add it.
thanks,
-steve
P.S. my first alpha of EMarket based on ZPatterns is just about
ready. I'm sure it's full of similar pollution. This would
be a great place for a design review. ;-)