it’s important to remember that design patterns are tools, and not rules.
Architectural patterns for Distributed Systems
Over the last several years, a number of authors have presented patterns that characterize high-level software architectures, such as PIPELINE and LAYERED ARCHITECTURE. In an ideal world, every system would be an exemplar of one or more such high-level patterns. Yet, this is not so. The architecture that actually predominates in practice has yet to be discussed: the BIG BALL OF MUD.