Sliding Classes / Context Lens
Recent interactions and sessions on domain reveal that sometimes people in one part of the business system use a term with a meaning different from the way another group uses it. Sometimes, the core is the same and there might be peripheral differences, sometimes it might be a parallel definition.
But we still try to hammer it down to one model which works for both. That might be a mistake. In such case, maybe the class has shifting responsiblities throughout its lifecycle. Instead of cramming all of them into the class, how about a class whose definition depends upon the context it is being discussed in. How it might be modelled, still thinking...
Extreme Components
The class should have methods but none of them should contain any real code. They should all be delegated to method objects. Profusion of classes versus extreme plug-and-play, increased testability, easy to configure. Is it very utopian?
Relationship Objects
In some cases, there is no direct one-to-one relationship between a model that we draw and the actual code though it is required. The reason is that there is no explicit relationship object. Is it worthwhile in some cases to actually create relationship objects explicitly, so that an easier understanding may be gotten. Better than trying to figure out implicit stuff from the code, I think.
Smallest Workflow Unit
It probably should be the smallest cancellable / undoable unit. If a unit/class/transaction needs to undo something inside its lifecycle, there might be another unit sitting inside there.
State and History of a Domain Object
In some cases, it may be useful to store state in terms of the actions performed, rather than the current data. Might help in tracking the history of the object, and would natively support undo operations.
Is Status.Booked really booked ?
Sometimes, changing status may not immediately imply a real change in the real world. In such a case, it is not really the status that we want to set. The business may have a name for it, or we may need to supply an artificial status.