Question for the (old) Extreme Programming crowd:
Does System Metaphor work best when you're building using OO? (I'm thinking of the translation to "4 key objects", for example)
Also: do you think of System Metaphor as relating to internals or externals? For example, modelling the C3 payroll system as a manufacturing production line always seemed to me to be an _internal_ view...
In _XP Explained_ Kent Beck says 'The metaphor in XP replaces much of what other people call "architecture."'
But what if it doesn't? For example, what if you have separate read-models and write-models? What if your software architecture in no way maps to your Customers' mental model? Does System metaphor only properly work for (small) OO applications...?
@kevinrutherford it would seem worrying if a customers mental model “in no way maps to the architecture” unless the architecture is bad or originally designed with different needs in mind and perhaps is no longer likely to meet the ongoing/changing needs of the system. Surely their mental model at a high level has to be relatively good just to use the system?
@MatthewPCooke I think I'd expect the opposite. As a user of Amazon, I'm thinking in terms of products, postage charges, reviews, sellers etc -- I'm definitely not thinking about lambdas, message queues, VMs, BFFs etc.
I can see the value in having a Ubiquitous Language, so that my architectural components have names drawn from the user's mental model. But architecture seems to me to be orthogonal to that?
@kevinrutherford ah when you say architecture, I was thinking more of the systems concepts, the relationships between them and the operations/events/states they can be in. The things that cross the customer/engineer boundary and need to be modeled in some way regardless of the implementation. You were thinking a little lower about the underlying system design
@kevinrutherford i guess when I think about the level of a system metaphor I’m thinking it’s useful for understanding the concept that both customer and engineers need to be aware are being modeled that are likely to map “in some way” to the underlying architecture, as a new engineer to better understand the underlying system you’d ideally need a knowledge of both the type of architecture(s)/frameworks being used (n tier, event sourced, whatever) AND the high level system metaphor.
@kevinrutherford i suppose it might be that if you knew the system metaphor it might immediately make you think some type of underlying technical architecture might be better suited for the system, but other than that, I reckon the system metaphor isn’t going to give away much of the underlying architecture choices by itself. Like it might suggest what concepts might exist in the write model or what useful views could exist in the read model, if someone also told you the system uses separate read/write models, but it isn’t going to indicate that separate read/write models are being used in the actual metaphor. Or I reckon that would be unusual anyway.
@kevinrutherford (he says authoritatively, having never really used the XP system metaphor concept )