Programming is a fairly young field of knowledge, however, it already has the basic principles of “good code”, considered by most developers as axioms. Everyone has heard of SOLID, KISS, YAGNI and other three- or four-letter abbreviations that make your code cleaner. These principles affect the architecture of your application, but in addition to them there are architectural styles, methodologies, frameworks and much more.
Exploring all this separately, I was interested in the question – how are they interrelated? Trying to build a hierarchy and inspired by the notorious Maslow pyramid , I built my pyramid of “application architecture.”
About what came of it – read under the cut.
About the pyramid
Pyramid is just a convenient visualization for visual representation of hierarchy of different principles, styles and methodologies. The pyramid consists of levels, and levels of elements. Each level additionally has its generalized name. The pyramid should be read from bottom to top, from the most basic and general concepts below, to the more particular and concrete ones at the top. The order of the elements located on the same level does not matter. Elements of the same level are considered “equivalent” or “equal”.
Levels of the pyramid
Consider each of the levels of the pyramid, consistently rising from its base to the top. Each of the principles mentioned in the article is described in detail many times in books and articles. Therefore, I will not describe them in detail, giving only a brief quote and reference. Instead, I will try to explain – why the levels are located just like this and how all of this can be used.
The basis of the pyramid is objective (physical) constraints for the application. It can be anything: the size of the team, the budget, the deadline, the legislation of the country and even the current level of technology development. The main distinguishing feature of these kinds of restrictions is that you can not influence them.
Obviously, such restrictions affect the whole project – on its architecture, the choice of technologies and the way the team is managed.
Above unconditional restrictions are business requirements: functional and / or technical specifications, customer wishes, explicit and implicit functions that the end user expects to receive.
Business requirements introduce additional (and often basic) restrictions on the architecture of the application. But they can not contradict common sense unconditional restrictions. They only further restrict our freedom of choice and therefore are located above the unconditional requirements.