Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision | |||
| arch:strategic_domain_driven_design_and_enterprise_architecture [2026/08/29 07:53] – Bulk sync migration user | arch:strategic_domain_driven_design_and_enterprise_architecture [2026/08/29 07:59] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ===== Strategic domain driven design and enterprise architecture ===== | ||
| + | By Victor Kugay (vekugay@edu.hse.ru) | ||
| + | |||
| + | ===== Introduction ===== | ||
| + | |||
| + | Domain-Driven (DDD) design is not a technology or a methodology. It is a way of thinking and a set of priorities which help us to speed up software projects that have to deal with complicated domains. The DDD patterns such as Entity, Value Object, Aggregate and Repository have been used in software engineering to model complex business domains since Domain-driven Design has been introduced by Eric Evans in 2003[[arch: | ||
| + | Strategic Domain-driven Design can be used to decompose the problem domain of a software system into multiple sub-domains and the so-called Bounded Contexts. It also allows architects to define the relationships between Bounded Contexts, e.g., how they work together. Strategic design provides three main building blocks: Context mapping, Distillation, | ||
| + | |||
| + | ===== Problems and solutions ===== | ||
| + | |||
| + | The decomposition of a monolithic application into multiple services is challenging. High cohesion within the services and loose coupling between them are one of the most preferable and crucial purposes to keep the application scalable and maintainable. Decomposing software systems into smaller, more maintainable and reliable units has been open research question for many years. Many scientists and developers already wrote about it. For instance, David Parnas wrote about decomposing systems into modules in 1972[[arch: | ||
| + | |||
| + | which criteria are relevant to find adequate services boundaries and which patterns and practices can be applied to identify candidate services[[arch: | ||
| + | |||
| + | Developers who use microservices pattern suggest to leverage DDD patterns to answer the above design questions. DDD provide mechanisms to model software-intensive systems in terms of Bounded Contexts, and then implement one microservice for each Bounded Context. Microservices architecture has a lot of benefits but this is not a silver bullet and this approach also has disadvantages when essential benefits of this architecture became burdens: velocity plummeted, defect rate exploded[[arch: | ||
| + | |||
| + | ===== Example ===== | ||
| + | |||
| + | In my team which develops different marketing projects with short lifetime within large bank ecosystem this is a crucial advantage of the Context Map and Bounded Contexts. Working with a lot of project and bank teams requires to design software with multiple dependencies. Practically, | ||
| + | |||
| + | The experience from our use of strategic level Domain-Driven design is that context maps and the activity of context mapping can improve the quality of the Enterprise Architecture and its derived software architectures as well. Another finding is that being able to identify the projects core domain is important with respect to how to utilize development resources, and how developers choose to think about the software under development. The encountered challenge is for the business to agree on what is most important, where one of the discoveries is that in large scale systems there will be multiple cores. Next finding was that the combination of context maps and responsibility layers reduces the perceived complexity. In summary strategic level Domain-Driven design can be used to enhance Enterprise Architectures and the derived software architectures. | ||
| + | |||
| + | In larger projects enterprise architecture identifies the main components of the organization, | ||
| + | |||
| + | ===== Conclusion ===== | ||
| + | |||
| + | DDD patterns can significantly accelerate developing process. Problems and solutions space aligned in a common language and an architecture that can incrementally accommodate change in order to move fast is the key to successful growth. That’s where strategic patterns play a role. | ||
| + | Of course, DDD cannot solve all issues depend on software development but in particular cases Bounded contexts and Context Map also another DDD patterns can dramatically improve communication and responsibilities between developers and managers. | ||
| + | |||
| + | [[arch: | ||
| + | |||
| + | Evans, E. (2003). Domain-Driven Design: Tackling Complexity in the Heart of Software. Addison-Wesley | ||
| + | |||
| + | [[arch: | ||
| + | |||
| + | Parnas, D. L. (1972). On the criteria to be used in decomposing systems into modules. Commun. ACM, 15(12): | ||
| + | |||
| + | [[arch: | ||
| + | |||
| + | Pautasso, C., Zimmermann, O., Amundsen, M., Lewis, J., and Josuttis, N. (2017). Microservices in practice, part 1: Reality check and service design. IEEE Software, 34(1): | ||
| + | |||
| + | [[arch: | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | [[arch: | ||
| + | |||
| + | [[https:// | ||