On 21-09-15 12:09, Peter Uhnák wrote:
Thank you Stephan, I think the image is becoming much clearer.
However I still don't understand how SRP applies here:
Person>>asNameMagritteMorph ^(self magritteDescription select: [:each | each label = 'Name']) asMorphOn: self
Surely this is responsibility of the tool that needs it, no?
No. It is a domain model. The person class is an information holder/structurer (Object Design, Roles, Responsibilities, and Collaborations), describing all possible uses, the user selects the one it needs. If the morph you need depends on the context in which it is shown, you might want to add a Person>>asMagritteMorphFrom: aDomainContext ^(aDomainContext magritteDescriptionFor: self magritteDescription) asMorphOn: self and do the selection on the other side
Otherwise the Person class would have to describe every single possible scenario.
Not the scenario, but the possible combinations yes.
Or maybe the tool would puts this into an extension protocol, which while visually places the code to Person class is actually separated (because it's part of another repository).
For optional parts that works well, especially using MAObject subclasses with the dictionary based properties.
In any case I can always use asMagritteMorph morph asSpecAdapter in the meantime and maybe stitch together a Spec version once I am comfortable with Magritte.
That sounds like the right order.