관리 메뉴

IT 컴퓨터공학 자료실

Domain Driven Design에 대해 본문

영어 번역 & 일본어 번역

Domain Driven Design에 대해

윤맨1 2015. 7. 14. 19:02

Domain-driven design (DDD) is an approach to software development for complex needs by connecting the implementation to an evolving model. The premise of domain-driven design is the following:

 

Domain-driven design은 발전하는 모델의 구현물에 연결함으로서 복잡성 요구를 위한 소프트웨어 개발에 대한 접근법이다. Domain-driven design을 간략히 설명하면 다음과 같다:

 

Placing the project's primary focus on the core domain and domain logic.

Basing complex designs on a model of the domain.

Initiating a creative collaboration between technical and domain experts to iteratively refine a conceptual model that addresses particular domain problems.

 

코어 도메인과 도메인 로직 부분에 프로젝트의 관점을 집중시킨다.

도메인에 대한 모델에 대한 복잡한 디자인들을 기초로 둔다.

기술 전문가들과 도메인 전문가들에게 반복적으로 정제하여 도메인 모델 문제들에 대한 개념적 모델을 기록한다.

Core definitions

주요 용어

 

Domain : A sphere of knowledge (ontology), influence, or activity. The subject area to which the user applies a program is the domain of the software.

Model : A system of abstractions that describes selected aspects of a domain and can be used to solve problems related to that domain.

Ubiquitous Language : A language structured around the domain model and used by all team members to connect all the activities of the team with the software.

Context : The setting in which a word or statement appears that determines its meaning.

 

도메인 : 지식이나 억양, 활동 등의 한 영역. 소프트웨어의 도메인은 어느 사용자에게 프로그램을 적용할지에 대한 주제의 영역이라고 할 수 있다.

모델 : 모델이란 도메인에 대해 서술하는 특정 관점에 대한 추상적인 시스템이다. 또한 모델은 도메인과 관계된 문제들을 해결하는 데에 사용될 수 있다.

유비쿼터스 언어 : 유비쿼터스 언어는 도메인 모델과 관계된 구조적인 언어이다. 또한 소프트웨어와 관련된 팀의 활동과 관계된 팀 구성원들이 사용하는 언어이다.

문맥 : 문맥은 단어나 문장이 그것이 어떤 의미를 가질 것인가 정하는 것이다.

Building blocks of DDD

Domain-driven design의 구성 요소

 

In the book Domain-Driven Design, a number of high-level concepts and practices are articulated, such as ubiquitous language meaning that the domain model should form a common language given by domain experts for describing system requirements, that works equally well for the business users or sponsors and for the software developers. The book is very focused on describing the domain layer as one of the common layers in an object-oriented system with a multilayered architecture. In DDD, there are artifacts to express, create, and retrieve domain models:

 

Domain-driven design 책에서는, 유비쿼터스 언어가 의미하는 많은 고차원 개념들과 실행들은 소프트웨어 개발자나 사용자 혹은 스폰서들에게 동일하게 적용된다. 이 책은 도메인 레이어에 대한 설명에 매우 집중되어 서술되고 있으며, 객체 지향적 시스템에서의 멀티레이어 구조 측면에서 표현되고 있다. Domain-driven design에서는 표현되고, 생성되고, 개선되는 도메인 모델 구현물들이 있다:

 

Entity : An object that is not defined by its attributes, but rather by a thread of continuity and its identity.

 

엔티티 : 하나의 객체라고 할 수 있다. 자신의 속성으로서 정의되지는 않지만 자신의 독자성과 스레드의 지속성으로 정의된다.

 

Value Object : An object that contains attributes but has no conceptual identity. They should be treated as immutable.

 

밸루 오브젝트 : 속성은 포함하는 객체이다. 그러나 개념적 독자성은 갖지 않는다. 속성들의 성격은 변하지 않아야 한다.

 

Aggregate : A collection of objects that are bound together by a root entity, otherwise known as an aggregate root. The aggregate root guarantees the consistency of changes being made within the aggregate by forbidding external objects from holding references to its members.

 

어그리게잇 : 어그리게잇 루트로 알려진 루트 엔티티와 긴밀하게 관계하는 객체들의 모임. 어그리게잇 루트는 어그리게잇 내에서 자신의 내부 멤버의 참조로부터 외부 객체를 금지함으로써 변화에 대한 일관성이 보장된다.

 

Domain Event : A domain object that defines an event (something that happens). A domain event is an event that domain experts care about.

 

도메인 이벤트 : 한 도메인 객체에 대해 이벤트가 정의되는 것(이벤트란 무언가가 일어나는 것을 의미한다)이다. 도메인 이벤트는 도메인 전문가들이 관리한다.

Service : When an operation does not conceptually

belong to any object. Following the natural contours of the problem, you can implement these operations in services.

 

서비스 : 한 오퍼레이션이 개념적으로 어느 객체에도 소속되지 않을 때. 문제의 발생 윤곽을 따라가면, 서비스에 대한 오퍼레이션을 구현할 수 있다.

 

Repository : Methods for retrieving domain objects should delegate to a specialized Repository object such that alternative storage implementations may be easily interchanged.

 

리포지터리 : retrieving되는 도메인 객체에 사용되는 메소드는 전문화된 리포지터리 객체로 대표되어야 한다. 리포지터리 객체는 대체적인 스토리지 구현물로 쉽게 대체될 수 있어야한다.

 

Factory : Methods for creating domain objects should delegate to a specialized Factory object such that alternative implementations may be easily interchanged.

 

팩토리 : 도메인 객체를 만들 때 사용되는 메소드는 전문화된 팩토리 객체로 대표되어야 한다. 팩토리 객체는 대체적인 구현물로 쉽게 대체될 수 있어야 한다.



출처 : https://en.wikipedia.org/wiki/Domain-driven_design