官术网_书友最值得收藏!

Domain-driven design (DDD) fundamentals

An enterprise, or cloud application, solves business problems and other real-world problems. These problems cannot be resolved without knowledge of the particular domain. For example, you cannot provide a software solution for a financial system such as online stock trading if you don't understand stock exchanges and how they function. Therefore, having domain knowledge is a must for solving problems. Now, if you want to offer a solution such as software or an application, you need to have some domain knowledge to design it. Combining the domain and software design is a software design methodology known as DDD.

When we develop software to implement real-world scenarios offering the functionalities needed for a domain, we create a model of that domain. A model is an abstraction, or a blueprint, of the domain.

Eric Evans coined the term DDD in his book Domain-Driven Design: Tackling Complexity in the Heart of Software, published in 2004.

Designing this model is not rocket science, but it does take a lot of effort, refinement, and input from domain experts. This is the collective job of software designers, domain experts, and developers. They organize information, divide it into smaller parts, group them logically, and create modules. Each module can be taken up individually, and can be divided using a similar approach. This process can be followed until we reach the unit level, or until we cannot divide it any further. A complex project may have more such iterations; similarly, a simple project could have just a single iteration.

Once a model has been defined and well-documented, it can move onto the next stage—code design. So, here, we have a software design—a domain model and code design, and code implementation of the domain model. The domain model provides a high-level view of the architecture of a solution (software/application), and the code implementation gives the domain model a life, as a working model.

DDD makes design and development work together. It provides the ability to develop software continuously, while keeping the design up to date based on feedback received on the development. It solves one of the limitations of the agile and waterfall methodologies, making software maintainable, including its design and code, as well as keeping application minimum viable (minimum viable productMVP).

Design-driven development involves a developer right from the initial stage, and software designers discuss the domain with domain experts at all meetings during the modeling process. This gives developers the right platform to understand the domain, and provides the opportunity to share early feedback on the domain model implementation. It removes the bottleneck that appears in later stages when stockholders wait for deliverables.

主站蜘蛛池模板: 哈密市| 长岭县| 丰镇市| 望谟县| 图木舒克市| 鹰潭市| 福安市| 铁岭市| 阿拉尔市| 芷江| 舟曲县| 昭觉县| 莱州市| 万载县| 苏尼特左旗| 漳浦县| 平塘县| 桓台县| 正宁县| 南阳市| 宁河县| 嘉义县| 平舆县| 桐庐县| 绥芬河市| 台中市| 尼勒克县| 阳信县| 大埔县| 嘉禾县| 榆树市| 泽普县| 荔浦县| 昭苏县| 时尚| 霸州市| 阳山县| 嵩明县| 镶黄旗| 扶余县| 乌兰浩特市|