[Design] Conceptual model for "stamping"

Phillip J. Eby pje at telecommunity.com
Fri Jan 21 16:21:41 PST 2005


At 03:21 PM 1/21/05 -0800, Mimi Yin wrote:
>I'm going to stay out of the discussion about how the user's mental model 
>of stamping is actually implemented, but I'm going to try to throw in yet 
>another "from the user's perspective" explanation of stamping in the 
>context of extensibility in the hopes that it might clarify things a bit.

Yes, it does.  (Also, I've already officially given up on promoting the 
user model I originally proposed.  I'm now focusing exclusively on how to 
ensure that the implementation of the existing model can be mapped to a 
testable content modelling API that will support ongoing expansion of 
Chandler's content types and capabilities.)

In this message, I'll attempt to show how the action/object distinction can 
be used to organize the API in a way that keeps the user model the same, 
and hopefully addresses Donn's concerns about synchronization and other issues.


>Again, I don't think this changes requirements for implementation. If 
>anything I think it reinforces our original thinking which is that 
>Stamping Kinds or Mixin Kinds, which I actually call Action Kinds on the 
>wiki page are a limited set and non-Mixin Kinds (aka Object Kinds) will be 
>far more prevalent. But perhaps both should be extensible, at least in an 
>ideal world.

The current implementation model isn't particularly extensible, though, 
which is what led me to inquire about this in the first place, and to bring 
up the action item/content item distinction as an attempt at having an 
extensible model.

So, now that you have seen the same distinction, I think a simple way to 
implement it would be just to have Action Kinds not carry any of the 
information that an Object Kind would normally carry, so when you display 
an Action Kind on a to-do list for example, it gets its description from 
the Object Kind it's attached to.  In the degenerate case, what is now a 
Task would actually be a Note (object kind) + Task (action kind).

To put it more concretely, if you look at the EndUserStampingModelSpec page 
and say that a Task now *only* has the magenta fields, and none of the 
white fields, it must have a Note to supply the white fields.  From the UI 
POV, this can be indistinguishable from the current Task type, but 
internally it is more readily extensible to new action kinds and new object 
kinds.  Since there is really only one copy of each kind of field, there 
are no conflicts or synchronization issues between copied fields.

So the overall schema looks something like this:

* ObjectItem has an optional attribute 'actions' with cardinality 'list' 
and type 'ActionItem'

* ActionItem has a required attribute 'object' with cardinality 'single' 
and type 'ObjectItem'

* Both ObjectItem and ActionItem are subkinds of Item

Now, you can have as many ObjectItem or ActionItem subkinds as you 
like.  ActionItem kinds cannot be created independently, however, because 
they must refer to an ObjectItem and have no content values of their own, 
just fields for the action that they superimpose.

That is, you can't create an Event per se, only a note "stamped as" an 
event, if you see what I mean.  I don't think this actually changes any of 
the existing UI scenarios, except insofar as it makes them extensible to an 
arbitrary number of action kinds and object kinds.  After all, in the 
content creation workflows you always start with an empty note and a markup 
bar, right?  So, you'd still do that and it would still look the same, but 
there's a potential to have other kinds added to the markup bar later, and 
you can also have the markup bar work with non-Note content types.

And, for my API use cases, it's now possible to explain to a programmer how 
to create a new object kind or action kind, without any blurring of 
responsibilities across the two.  Queries on action kinds of course need to 
traverse over to the object kind if you are doing a text search, but 
presumably the bulk of action-kind querying is to display things like 
"today's calendar entries" and most needs the action item data anyway.



More information about the Design mailing list