+Abstractions of different levels can be both in the same address space (one process or one application) and in different ones. It is possible to separate them from each other and to implement interaction between them with the help of programming interfaces, modularity, component approach and simply by willpower, avoiding direct calls from the middle of one software component to the middle of another one, if the programming language or platform does not take care to prevent such an ability. This should be done even within one process, where any functions, components, and modules could be accessed from any other, even if they logically belong to different layers. The reason for this is the need to reduce the interdependence of layers and software components, ensuring their interchangeability, reuse and making their separate development possible. At the same time, it is necessary to increase the connectivity within the layers, components and modules, which ensures the growth of the productivity of the code, its ease of reading, understanding and modification. If we manage to avoid the connection between different levels of abstractions, and with the help of decomposition to ensure that one module can always be fully covered by the attention of one engineer, the development process becomes scalable, manageable and more predictable. A similar idea is the basis of microservices architecture, but the more general principle applies to any system, and it does not matter whether they are independently running microservices or modules running in the same process.
0 commit comments