There are a number of fundamental ways to structure a program. Beyond just sections of code, each application, or component, has some fundamental architectural design. Is it an event driven UI, a functional financial calculator, an imperative device driver, or a deployment description?
Whereas patterns are used to describe smaller units of coding, architectural paradigms describe the overall structure: the high-level concepts of how components are combined. This includes how they connect to each other, how they provide results, and how the process executes over time.
In this series, we’ll look at these paradigms.
The choice of paradigm is not automatically decided by the programming language. Most languages have evolved to provide a variety of options, though some may favour certain paradigms. If a language is quite limited in what it offers, possibly only one paradigm, we call it domain specific. A general purpose language is one that offers all, or most, of the fundamental architectural paradigms.
Applications can comprise one or more of the fundamental paradigms. They each serve different goals with differing degrees of success. But while mixing is encouraged, it’s not good if a program’s architecture is just a random collection of techniques. The cleaner the archtitecture the easier it is to maintain the code.