We still don't yet have a good understanding of the architectural patterns that are found across domains. Mary Shaw and David Garlan have conducted pioneering work on basic architectural patterns, Fowler has done the same for enterprise sytems, and Pont has done likewise for embedded systems. There are no industry studies that cut across the entire spectrum of software-intensive systems, and as such we just don't have the data from which to compare and contrast architectures and architectural patterns across domains. This is problematic: first, as development cultures become more entrenched within a particular domain, it becomes more and more difficult for an individual developer to cross domains; second, my experience is that there is only a modest number of unique architectures, and yet we as an industry tend to reinvent them in each domain because we have no good way to talk about them.
What might we name those distinct architectural patterns? The short answer is that I don't yet know enough to say; I have many more systems to study before I can feel confident in an answer. However, building on Mary and David's work and augmenting it with what my intuition tells me yields the following list:
- Pipe and filter
- Message passing
- Semantic network
- Event driven
- Time division
I know that this list is wrong: among other things, it's a curious mixture of structural and behavioral patterns, and thus there's really not collectively a good separation of concerns It will be interesting to revisit this list next year to see how my understanding has changed.
I'd be interesting in hearing from anyone out there who might have other architectural patterns to suggest.