https://ja.wikipedia.org/wiki/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88
https://ja-m-wikipedia-org.translate.goog/wiki/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88?_x_tr_sl=ja&_x_tr_tl=en&_x_tr_hl=ja&_x_tr_pto=wapp
Domain -driven design ( DDD ) is a software design methodology that focuses on modeling software to match the domain according to input from domain experts [ 1 ] [2 ] ] . Object-oriented programming means that the structure and names of the source code (class names, class methods , class variables ) must match the business domain. For example, software that processes loan applications might include classes such as LoanApplication and Customer , and methods such as AcceptOffer and Withdraw . Domain Driven Design is based on the following goals:
- Put the main focus of the project on the core domain and domain logic.
- A complex design based on a model of the domain.
- Initiate creative collaborations between technical and domain experts to iteratively refine conceptual models that address specific domain problems.
While domain-driven design is usually criticized for requiring developers to implement a large amount of isolation and encapsulation in order to keep the model as a pure and useful structure, domain-driven design offers advantages such as maintainability. I will provide a. Microsoft, on the other hand, only recommends it for complex domains where the model offers distinct advantages in formulating a common understanding of the domain. This name was used by Eric Evans in his book Domain-Driven Design: Tackling Complexity in the Heart of Software [ 3] .
Overview
Domain-Driven Design articulates many high-level concepts and practices [3] . The most important is the domain , and the subject area to which the user applies the program is the domain of the software. A domain of software governs its context , the setting in which a word or statement is displayed that determines its meaning. From this, the developer builds a domain model . It is a system of abstractions that describe selected aspects of a domain and can be used to solve problems related to that domain. These aspects of Domain Driven Design are intended to promote a ubiquitous language . The idea is that a domain model should form a common language shared by domain experts to describe system requirements, business users, sponsors, and developers [3]. . In domain-driven design, the layer the common layers object -oriented multi - tier architecture .
model type
Domain Driven Design distinguishes between several kinds of models. For example , an entity is an object defined by an ID rather than an attribute . As an example, most airlines identify every flight seat with a unique ID. Value objects , in contrast, are immutable objects that contain attributes but have no conceptual identity . For example, when people exchange business cards, they do not try to distinguish unique business cards, but only use the information (attributes) written on the business cards. Models can also define events (something that happened in the past). A domain event is an event of interest to domain experts. Models can be joined by root entities and become aggregates . An object outside the aggregate can hold a reference to its root, but not to other objects in the aggregate. The aggregate root checks the consistency of changes within the aggregate. For example, the driver does not have to individually control each wheel of the car but simply drives the car. In this context, a car can be said to be an aggregation of several other objects (engine, brakes, headlights, etc.).
Working with models
In domain-driven design, object creation is often decoupled from the object itself. For example , a repository is an object with methods for retrieving domain objects from a data store (such as a database), and similarly a factory is an object with methods for creating domain objects directly. When a piece of a program's functionality does not conceptually belong to any object, it is usually expressed as a service .
Relationship with other concepts
- Object-oriented analytical design
- The concept of domain-driven design is theoretically not restricted to object-oriented approaches. In fact, domain-driven design seeks to take advantage of the strengths that object-oriented techniques offer.
- Model Driven Engineering (MDE)
- Model Driven Architecture (MDA)
- The idea of MDA is compatible with Domain Driven Design, but the intentions of the two concepts are somewhat different. MDA is more interested in how to translate the model into code for different platforms of technology than how to better define the domain model.
- POJOs and POCOs
- POJOs and POCOs are implementation concepts, specific to Java and the .NET Framework respectively. However, the emergence of the terms POJO and POCO is purely due to the business behavior of the corresponding domain concepts, not to the requirements of any particular technology, in either of the two platforms. It shows that the idea that objects should be defined is spreading.
- [[
- en:naked objects| Objects based on two assumptions [4] .
- With a good domain model, the user interface simply reflects the domain model.
- If you want a user interface that directly reflects your domain model, you're forced to design a better domain model.
- Domain Specific Language (DSL)
- Domain-Driven Design does not necessarily require a DSL, but it defines a DSL and helps implement techniques such as multimodeling .
- Aspect Oriented Programming (AOP)
- With AOP, technical concerns (security, transaction management, logging) can be easily abstracted from the domain model, facilitating the design and implementation of a domain model that focuses purely on business logic.
Software tools that support domain-driven design
Domain Driven Development practices are independent of any particular software tool or framework. However, a number of open source tools and frameworks support the patterns recommended in Evans' book and the Domain Driven Development methodology. There are the following.
- Castle Windsor/MicroKernel [5] : An inversion of control / dependency injection container for Microsoft 's .NET Framework that provides services, repositories and factories to consumers.
- Cosmos [6] : An application framework that supports domain-driven design, especially AOP practices.
- DataObjects.Net : A framework/development environment for database applications, supporting object-relational mapping and domain-driven development.
- Domdrides [7] : A useful library for implementing domain-driven design in Java.
- ECO : Framework for database, code and state machine generation from UML diagrams by CapableObjects [ 8] .
- Flow [9] : A PHP application framework focused on domain-driven development. It encourages the formation of good domain models and supports repositories, entities and value objects. It also provides dependency injection and AOP frameworks.
- Habanero.NET (Habanero): An enterprise application framework for developing enterprise applications using open source domain-driven development principles, implemented on the .NET Framework.
- ManyDesigns_Portofino : ManyDesigns Portofino is an open source, model-driven web application framework that targets high productivity and maintainability. It provides CRUD forms, relationships, workflow management, dashboards, breadcrumbs, search, single sign-on, permissions, reports, and more.
- NakedObjectsFramework [10] , Apache Isis [11] : implements the naked objects pattern and supports dependency injection . It also implements the concepts of repositories, factories, and services in Domain Driven Design in a reusable way.
- NReco [12] : A lightweight open source domain-specific MDD framework for .NET . Coupled with JQuery, Open NIC.NET, OGNL, Log4Net, Lucene.NET, SemWeb and more.
- OpenMDX : Jakarta EE , an open source MDA framework for Java that supports .NET. Unlike typical MDA frameworks, OpenMDX "uses models to directly manipulate the behavior of real systems."
- OpenXava : Generates Ajax applications from JPA entities . All you have to do is write a domain class to create a runnable application.
- Roma Meta Framework [13] : A domain-driven development-centric framework that allows designers/developers to see everything as a POJO, including GUI, internationalization, and persistence, in a new holistic way.
- Sculptor [14] : A code generation framework that uses domain-driven development terminology.
- Sculpture - Model Your Life [15] : Sculpture is one of the most powerful open source model-driven development code generation tools. From simple CRUD applications to large complex applications, Sculpture comes with pre-built types for popular frameworks such as NHibernate, Entity Framework, WCF, CSLA, Silverlight, WPF, ASP.NET MVC.
- Strandz [16] : A domain-driven framework that is implementation agnostic of both the UI layer and the domain layer of the application. Programmers use special classes to describe the wire model of an application.
- TrueView for .NET [17] : An easy-to-use framework with support for model-driven development and naked objects, suitable for teams getting started with model-driven development.
- ASP.NET Boilerplate [18] : A domain-driven development web application creation framework that enables N-layer application development. As the name suggests, it is built on Microsoft's .NET Framework technology.
Annotation
source
- ^ Millet, Scott; Tune, Nick (2015). Patterns, Principles, and Practices of Domain-Driven Design . Indianapolis: Wrox. ISBN 978-1-118-71470-6 .
- ^ Vernon, Vaughn (2013). Implementing Domain-Driven Design . Upper Saddle River, NJ: Addison-Wesley. p. ISBN 978-0-321-83457-7
- ^ a b c Evans, Eric (2004). Domain-Driven Design: Tackling Complexity in the Heart of Software . Boston: Addison-Wesley. ISBN 978-032-112521-7 Retrieved August 12, 2012 .
- ^ Haywood, D., Domain-Driven Design using Naked Objects , 2009, Pragmatic Programmers
- ^ " Castle Project ". www.castleproject.org . Retrieved August 23, 2022 .
- ^ " Microsoft – Cloud, Computers, Apps & Gaming ". www.microsoft.com . Retrieved August 23, 2022 .
- ^ " Domdrides - Overview " .domdrides.sourceforge.net . Retrieved August 23, 2022 .
- ^ " CapableObjects " (English). CapableObjects . Retrieved August 23, 2022 .
- ^ “ Home ” (English). Home . Retrieved August 2022, 8 .
- ^ Naked Objects , Naked Objects Group Ltd, (2022-07-30) Retrieved August 23, 2022 .
- ^ " Apache Isis ". isis.apache.org . Retrieved August 23, 2022 .
- ^ " NReco: .NET REusable COmponents ". www.nrecosite.com . Retrieved August 23, 2022 .
- ^ " Roma Framework: The new way to conceive Web Applications ". www.romaframework.org . Retrieved 23 August 2022 .
- ^ " Sculptor - Generating Java code from DDD-inspired textual DSL ". sculptorgenerator.org . Retrieved August 23, 2022 .
- ^ Dawilasoft - Sculpture - Wayback Machine (For archived April 22, 2012)
- ^ Standz - Wayback Machine (For archived October 28, 2016)
- ^ " TrueView for .NET | Agile development tools for Domain Driven Design | Home ". TrueView | Agile development tools for .NET & Domain Driven Design . Retrieved August 23, 2022 .
- ^ Technology, Volosoft Computer and. " AspNet Boilerplate - Web Application Framework " (English). ASP.NET Boilerplate .
0 コメント:
コメントを投稿