One thing that unifies them is that they all let you create an architecture free of cycles that still manages to effectively communicate. This helps ensure a code change hits a firewall soon rather than spreading through the code base breaking component after component.
 
                