도메인 기반 디자인이란 무엇입니까?
누군가 도메인 기반 디자인이 정확히 무엇인지 간결하게 설명해 주시겠습니까? 나는 그 용어를 꽤 많이 보았지만 그것이 무엇인지 또는 어떻게 생겼는지 이해하지 못한다. 비 도메인 기반 디자인과 다른 점은 무엇입니까?
또한 누군가 도메인 개체가 무엇인지 설명 할 수 있습니까? 도메인은 일반 객체와 어떻게 다릅니 까?
편집하다:
이것이 Google에서 최고의 결과 인 것 같고 아래의 답변이 그렇지 않으므로이 더 나은 답변을 참조하십시오.
https://stackoverflow.com/a/1222488/1240557
오래된 답변 (완전하지 :))
좋은 소프트웨어를 만들려면 해당 소프트웨어가 무엇인지 알아야합니다. 뱅킹이 무엇인지 잘 이해하지 못하면 뱅킹 소프트웨어 시스템을 작성할 수 없으며 뱅킹 영역을 이해해야합니다.
보낸 사람 : Eric Evans의 도메인 기반 디자인.
이 책은 DDD를 잘 설명합니다.
책의 요약을 등록 및 다운로드 , 또는 직접 요약을 다운로드 .
Domain Driven Design은 문제 도메인 내의 활동, 작업, 이벤트 및 데이터를 솔루션 도메인의 기술 아티팩트로 매핑하는 복잡한 시스템 개발을위한 방법론 및 프로세스 처방입니다.
Domain Driven Design의 강조점은 문제 영역의 추상 모델을 작성하여 특정 기술 세트에서 구현할 수 있도록 문제 영역을 이해하는 것입니다. 방법론으로서의 도메인 중심 설계는이 모델 개발 및 기술 개발로 인해 시스템을 사용하는 사람들의 요구를 충족시키는 동시에 문제 영역의 변화에도 견딜 수있는 시스템을 만드는 방법에 대한 지침을 제공합니다.
도메인 기반 설계의 프로세스 측면에는 도메인 전문가, 문제 도메인을 아는 사람들 및 설계 / 아키텍처 전문가, 솔루션 도메인을 아는 사람들 간의 협업이 포함됩니다. 아이디어는 공유 언어가있는 공유 모델을 가져서 서로 다른 두 가지 관점을 가진이 두 도메인의 사람들이 솔루션에 대해 토론 할 때 실제로 공유 개념을 가진 공유 기술 자료를 논의하고 있습니다.
특정 시스템을 필요로하는 사람들과 시스템을 설계하고 구현하는 사람들 사이의 공유 된 문제 영역 이해의 부족은 성공적인 프로젝트의 핵심 장애인 것 같습니다. 도메인 기반 디자인은이 장애를 해결하는 방법입니다.
그것은 객체 모델을 갖는 것 이상입니다. 문제의 영역 내에서 실제 요구를 발견하고 해당 요구를 충족시키기 위해 적절한 솔루션을 만들 수 있도록 공유 커뮤니케이션 및 협업 개선에 중점을 둡니다.
도메인 주도 디자인 : 선과 도전 은이 의견에 대한 간략한 개요를 제공합니다.
DDD는 최상위 아키텍처를 발견하고 소프트웨어를 복제해야하는 도메인의 역학 및 역학에 대해 알려줍니다. 구체적으로, 잘 수행 된 DDD 분석은 도메인 전문가와 소프트웨어 설계자 간의 오해를 최소화하고 그에 따른 값 비싼 변경 요청을 줄입니다. 더 작은 컨텍스트에서 도메인 복잡성을 분할함으로써 DDD는 프로젝트 설계자가 부풀린 오브젝트 모델을 설계하지 않아도됩니다. 부풀린 오브젝트 모델은 구현 세부 사항을 처리하는 데 많은 시간이 손실되는 부분입니다. 회의실 화이트 보드의 크기.
또한 짧은 기사 를 제공하는 이 문서의 서비스 아키텍처 를 위한 도메인 기반 설계도 참조하십시오 . 이 문서에서는 도메인 기반 디자인에 대한 다음 축소판 그림 설명을 제공합니다.
Domain Driven Design은 사용 사례와 관련된 비즈니스 현실을 기반으로 모델링을 옹호합니다. 이제는 나이가 들고 과대 광고 수준이 감소함에 따라 DDD 접근 방식이 실제로 문제를 이해하고 솔루션을 공통적으로 이해하도록 소프트웨어를 설계하는 데 실제로 도움이된다는 사실을 잊고 있습니다. 응용 프로그램을 작성할 때 DDD는 도메인 및 하위 도메인으로 문제에 대해 이야기합니다. 독립적 인 단계 / 문제 영역을 경계 컨텍스트로 설명하고, 이러한 문제에 대해 이야기 할 공통 언어를 강조하며, 구현을 지원하기 위해 엔티티, 가치 개체 및 집계 루트 규칙과 같은 많은 기술 개념을 추가합니다.
Martin Fowler는 방법론으로서 Domain Driven Design이 언급 된 많은 기사를 작성했습니다. 예를 들어이 기사 BoundedContext 는 Domain Driven Development의 경계 컨텍스트 개념에 대한 개요를 제공합니다.
어린 시절에 우리는 전체 비즈니스의 통합 모델을 구축하도록 권고 받았지만, DDD는 "대형 시스템에 대한 도메인 모델의 전체 통합이 실현 가능하지 않거나 비용 효율적이지 않을 것"이라는 것을 알게되었습니다 1 . 대신 DDD는 큰 시스템을 경계 컨텍스트로 분할합니다. 각 컨텍스트는 통합 모델을 가질 수 있습니다. 본질적으로 MultipleCanonicalModels을 구성하는 방법입니다.
먼저 다음을 이해함으로써 도메인 기반 설계 만 이해할 수 있습니다.
도메인이란 무엇입니까?
시스템이 구축되는 필드입니다. 공항 관리, 보험 판매, 커피 숍, 궤도 비행 등 이름을 지정합니다.
응용 프로그램이 여러 도메인에 걸쳐있는 것은 드문 일이 아닙니다. 예를 들어, 온라인 소매 시스템은 배송 영역 (항목 및 목적지에 따라 적절한 배송 방법 선택), 가격 (예 : 위치 별 프로모션 및 사용자 별 가격 포함) 및 권장 사항 (계산 관련 계산)에서 작업 중일 수 있습니다. 구매 내역 별 제품).
모델이란 무엇입니까?
"문제에 대한 유용한 근사치." -게리 서스 만
Employee 클래스는 실제 직원이 아닙니다. 실제 직원을 모델링합니다. 우리는이 모델이 실제 직원에 관한 모든 것을 포착하지는 않는다는 것을 알고 있습니다. 현재 상황에 관심이있는 내용 만 캡처하기위한 것입니다.
서로 다른 도메인은 동일한 것을 모델링하는 다른 방법에 관심이있을 수 있습니다. 예를 들어, 급여 부서와 인사 부서는 직원을 다른 방식으로 모델링 할 수 있습니다.
도메인 모델이란 무엇입니까?
도메인 모델.
DDD (Domain-Driven Design) 란 무엇입니까?
도메인 모델을 깊이 평가하고이를 구현에 연결하는 개발 방식입니다. DDD는 Eric Evans가 공동으로 개발했으며 처음 개발했습니다.
여기서 추락
Here is another good article that you may check out on Domain Driven Design. if your application is anything serious than college assignment. The basic premise is structure everything around your entities and have a strong domain model. Differentiate between services that provide infrastructure related things (like sending email, persisting data) and services that actually do things that are your core business requirments.
Hope that helps.
As in TDD & BDD you/ team focus the most on test and behavior of the system than code implementation.
Similar way when system analyst, product owner, development team and ofcourse the code - entities/ classes, variables, functions, user interfaces processes communicate using the same language, its called Domain Driven Design
DDD is a thought process. When modeling a design of software you need to keep business domain/process in the center of attention rather than data structures, data flows, technology, internal and external dependencies.
There are many approaches to model systerm using DDD
- event sourcing (using events as a single source of truth)
- relational databases
- graph databases
- using functional languages
Domain object:
In very naive words, an object which
- has name based on business process/flow
- has complete control on its internal state i.e exposes methods to manipulate state.
- always fulfill all business invariants/business rules in context of its use.
- follows single responsibility principle
I believe the following pdf will give you the bigger picture. Domain Driven Design by Eric Evans
NOTE: Think of a project you can work on, apply the little things you understood and see best practices. It will help you to grow your ability to the micro service architecture design approach too.
DDD(domain driven design) is a useful concept for analyse of requirements of a project and handling the complexity of these requirements.Before that people were analysing these requirements with considering the relationships between classes and tables and in fact their design were based on database tables relationships it is not old but it has some problems:
In big projects with complex requirements it is not useful although this is a great way of design for small projects.
when you are dealing with none technical persons that they don,t have technical concept, this conflict may cause some huge problems in our project.
So DDD handle the first problem with considering the main project as a Domain and splitting each part of this project to small pieces which we are famous to Bounded Context and each of them do not have any influence on other pieces. And the second problem has been solved with a ubiquitous language which is a common language between technical team members and Product owners which are not technical but have enough knowledge about their requirements
Generally the simple definition for Domain is the main project that makes money for the owners and other teams.
참고URL : https://stackoverflow.com/questions/5325836/what-is-domain-driven-design
'Programing' 카테고리의 다른 글
문자열에서 첫 번째 문자를 제거하는 가장 빠른 방법 (0) | 2020.05.17 |
---|---|
유사성을 위해 이미지를 비교하는 간단하고 빠른 방법 (0) | 2020.05.17 |
JDBC 및 MySQL로 "통신 링크 실패"해결 (0) | 2020.05.16 |
유닉스 / 리눅스 시스템에서 실행중인 프로세스로 커맨드 라인 인수를 얻는 방법? (0) | 2020.05.16 |
Java : System.exit ()를 호출하는 메소드를 테스트하는 방법? (0) | 2020.05.16 |