SlideShare a Scribd company logo
1 of 30
Domain Driven Design 7장Using the Language:An Extended Example,[object Object],아꿈사스터디,[object Object],박일,[object Object]
Cargo Shipping 시스템,[object Object],기본 요구사항,[object Object],customer 의 cargo 를 추적할 수 있어야 한다.,[object Object],미리 cargo를 예약할 수 있어야 한다.,[object Object],cargo가 특정 handling 상태가 되면 customer 에게 자동으로 invoice 를 보내야 한다.,[object Object],여기까지 요구사항만 놓고 design 을 만들어보자.,[object Object]
그림 7.1,[object Object]
그림 7.1,[object Object]
model 에 나오는 객체들,[object Object],Handling Event,[object Object],Cargo 를 배에 싣고 내리는 등의 행위,[object Object],loading, unloading, being claimed 등의 상위클래스일 수 있음,[object Object],Delivery Specification,[object Object],목적지, 도착날짜,[object Object],Cargo 에게 맡기지 않고 따로 객체를 만든 이유,[object Object],Cargo 객체가 복잡해진다,[object Object],LoD(Level of Detail) 을 제공,[object Object],Cargo 의 목적이 Delivery Specification 이라는 걸 좀 더 분명하게 얘기할 수 있다.,[object Object]
model 에 나오는 객체들,[object Object],role,[object Object],Customer 의 역할(shipper, receiver, payer…),[object Object],한 Customer 는 특정 Cargo 에 대해서 하나의 role 만 맡는다(Qualified Association),[object Object],string 또는 클래스로 구현,[object Object],Carrier Movement,[object Object],특정 Carrier(트럭, 화물선) 가 Cargo 를 하나의 Location 에서 다른 Location 으로 이동시키는 행위,[object Object]
model 에 나오는 객체들,[object Object],Delivery History,[object Object],Cargo 에 어떤 일이 있었는지에 대한 기록,[object Object],Delivery History 는 마지막 Carrier Movement 로 Cargo 의 현재위치를 계산할 수 있다.,[object Object],각 객체를 어떻게 찾고 저장할지를 model 에서는 다루지 않지만 design 에서는 다뤄야 한다.,[object Object]
Application 도입,[object Object],Applications,[object Object],Tracking Query,[object Object],Booking Application,[object Object],Incident Logging Application,[object Object],application 은 coordinator 이다. 질문에 대한 답을 하는 것은 domain layer 영역,[object Object]
Entity,Value Object 구분,[object Object],Customer : 고객, 회사이므로 상식적으로 Entity,[object Object],TaxID는 ID 로 부적합. Customer 는 처음 sales contact 때 ID 를 부여하고 있더라.,[object Object],Cargo : Entity. 실제 각 물류회사에는 Cargo 별로 ID 부여,[object Object],Handling Event : Cargo 를 추적할 수 있어야 하므로 Entity,[object Object],Cargo ID, completion time, type 조합으로 ID 생성,[object Object],Carrier Movement : shipping schedule 코드로 identity 가능,[object Object],Location : 다른 지역이 이름만 같을 수 있으므로 unique ID 필요,[object Object],자동증가 id 정도면 충분,[object Object],Delivery History : 교환할 수 없으므로 entity.,[object Object],각 Cargo 별로 History 가 다르니까 Delivery History 는 Cargo 와 1:1 관계임. ,[object Object],AGGREGATES 관계로 가자(Cargo 의 멤버변수),[object Object],Delivery Specification 은 두 Cargo 가 같은 장소로 동시에 배송될 수 있으므로 VALUE OBJECTS,[object Object],Role 은 연계관계이지만, 지속성은 필요없음. VALUE OBJECT,[object Object],stamps, names 도 VALUE OBJECT,[object Object],모델에서 중요하지 않은 속성은 대문자를 부여받지 못함,[object Object],대문자를 받은 model language 는 위키페이지의 이름으로 쓸 수 있다,[object Object]
Shipping 에서 association 디자인,[object Object],상호참조는 최대한 피하자,[object Object],Customer 가 Cargo 를 레퍼런스하면귀찮을 수 있음,[object Object],Customer 가 Cargo 한정으로 사용되는 것도 아님,[object Object],특정한 배(Carrier)의 인벤토리를 추적한다면 Carrier Movement -> Handling Event 가 중요할 수 있지만 지금은 Cargo 만 추적하면 되므로 Handling Event  -> Carrier Movement 필요,[object Object],딱 필요한 만큼만 구현할 것,[object Object],환형 관계가 하나(Cargo -> Delivery History -> Handling Events -> Cargo) 있는데 가능하면 피해라.,[object Object],직접 레퍼런스가 싫다면 (DB 같이 query 가 가능한) REPOSITORY 를 이용하라.,[object Object]
Domain Driven Design Ch7
AGGREGATE 경계,[object Object],Customer, Location, Carrier Movement 는 Cargo 가 공유하므로 AGGREGATE root 여야 함,[object Object],Cargo 도 AGGREGATE 의 root 인데, 그 밑에 뭐가 들어갈 수 있을까?,[object Object],Delivery History 는 Cargo 를 통해서만 접근한다.,[object Object],Delivery Specification 는 VALUE OBJECT 니까 추가,[object Object],Handling Events,[object Object],collection 이든 DB 든 Delivery History 에 대한 Handling Events 를 찾을 수 있어야 하고,[object Object],특정 Carrier Movement 에 대해 load, unload 를 다 찾을 수 있어야 한다면, Handling Events 가 Cargo 에 독립적인 의미를 가지기 때문에 독자적인 AGGREGATE 의 root 가 되어야 한다.,[object Object],따로 빼면 low-contention transaction 으로 만들 수 있다.,[object Object]
Domain Driven Design Ch7
REPOSITORY 선택,[object Object],AGGREGATE root 가 아니면 REPOSITORY 가 필요없음(직접 접근할 일이 없으니까).,[object Object],Booking Application 에서는 여러 role (shipper, receiver, ...) 을 맡을 Customer 를 선택할 수 있어야 하므로 Customer Repository 가 필요하다.,[object Object],Cargo 의 도착지를 지정할 수 있어야 하므로 Location Repository 도 필요하다.,[object Object],Activity Logging Application 는 Cargo 를 실은 Carrier Movement 를 찾아볼 수 있어야 하므로 Carrier Movement Repository필요.,[object Object]
Domain Driven Design Ch7
Scenarios,[object Object],Customer 가 Cargo 의 목적지를 바꿀 수 있는가?,[object Object],Cargo 의 Delivery Specification 은 VALUE OBJECT 니까 덮어쓰면 된다.,[object Object],Repeat Business : 같은 Customer 에게 화물을 보낼 때 그전 정보를 prototype 으로 쓰고 싶다(yes24 의 이전배송정보 사용).,[object Object],Cargo 는 ENTITY 이자 AGGREGATE 의 root 이므로 주의,[object Object],Delivery History : 비어있는 새 객체 생성,[object Object],Customer Roles : Map (or collection) 을 key 와 함께 복사,[object Object],key : 역할, value : Customer ,[object Object],Tracking ID : 새로운 Tracking ID 를 제공한다.,[object Object],Cargo AGGREGATE 영역 밖에는영향을 미치지 않는다,[object Object]
객체 생성 - Cargo,[object Object],public Cargo CopyPrototype(String newTrackingID),[object Object],public Cargo newCargo(Cargo prototype, String newTrackingID),[object Object],public Cargo newCargo(Cargo prototype),[object Object],비어있는 Delivery History 와 Delivery Specification 가 null 인 Cargo 를리턴,[object Object],Delivery Specification 가 null 일 필요가 있을까?,[object Object],public Cargo(Stirng id) {,[object Object],trackingID = id;,[object Object],deliveryHistory = new DeliveryHistory(this);,[object Object],customerRoles = new HashMap();,[object Object]
객체 생성 - Handling Event 추가,[object Object],사용자는 Incident Logging Application 로 Handling Event 를 입력한다.,[object Object],Handling Event 는 ENTITY 이기 때문에 생성자에 identity 에 관련된 모든 attribute 가 다 들어와야 한다.,[object Object],Cargo ID + completion time + event type,[object Object],Handling Event 는 Cargo 를 handled 라는 멤버변수로 연관관계,[object Object],public HandlingEvent(Cargo c, String eventType, Date timeStamp) {,[object Object],	handled = c;		// const 변수감,[object Object],	type = eventType;	 // const 변수감,[object Object],completionTime = timeStamp;,[object Object],},[object Object],public static HandlingEventnewLoading(,[object Object],	Cargo c, CarrierMovementloadedOnto, Date timeStamp) {,[object Object],HandlingEvent r = new HandlingEvent(c, LOADING_EVENT, timeStamp);,[object Object],r.setCarrierMovement(loadedOnto);,[object Object],	return r;,[object Object],},[object Object]
Handling Event 추가하기 복잡함,[object Object]
잠깐, 다른 디자인은 없을까?,[object Object],Handling Event 를 추가할 때 Delivery History 를 업데이트하려면 Cargo AGGREGATE 를 transaction 걸어야 한다. 다른 user 가 같은 Cargo 를 동시에 고친다면 transaction이 실패(낙관적인 lock)하거나 지연(비관적인 lock)될 수 있다. Handling Event 를 경쟁없이추가하려면 design 을 고쳐야 한다.,[object Object],Handling Event 를 Delivery History 의 collection 대신 query 로 바꾸면 Handling Event 를 AGGREGATE 정합성 문제없이 추가 가능,[object Object],interference 없이 transaction 할 수 있다.,[object Object],Handling Event 의 입력이 많고 쿼리가 적다면 성능향상 가능.,[object Object],그래서 Handling Event Repository 를 추가한다.,[object Object],findByCargoIDTimeType, findByCargoTrackingID, findByScheduleID, findMostRecentCargoIDType,[object Object],Handling Event Repository 에서 원하는 history 를 query 할 수 있기 때문에 Delivery History 에 persistent state 가 없어지므로 쓸모없게 된다.,[object Object],다만, 하나의 Cargo 에 대한 전체 History 를 볼 일이 더 많을 경우라면 성능 trade-off 가 발생할 수 있다.,[object Object]
Domain Driven Design Ch7
새로운 기능을 추가해보자,[object Object],화물의 'type, 출발지, 목적지에 따른 화물량 예측' 기능을 Booking Application 에 통합해, 새로 booking 할 때 적합성 여부를 알고 싶다.,[object Object],Booking Application 은 Cargo Repository 와 Sales Management System 의 정보가 필요하다.,[object Object]
두 시스템 연결,[object Object],Sale Management System 은 별도의 소프트웨어(시스템),[object Object],Interface 로 wrap 하기 보다는,[object Object],중간에 번역 레이어를 두자,[object Object],Anti Corruption Layer,[object Object],번역,[object Object],DB -> 서버 -> 클라이언트 -> 엔진,[object Object],즐겨찾기DB -> XML 전송 -> IE, Firefox 변환,[object Object]
Segmenting the Business,[object Object],Cargo 의 type 을 정의하지 않았다.,[object Object],ENTERPRISE SEGMENT(Analysis Patterns),[object Object],a set of dimensions that define a way of breaking down a business,[object Object],Enterprise Segment 라는 클래스(VALUE OBJECT)가 등장,[object Object],날짜, 지역등으로구분짓는 데이터(일종의 where 절, 카테고리),[object Object]
Domain Driven Design Ch7
지역(국가/시/도/군/면,리)/날짜/제품군,[object Object]
Allocation Checker,[object Object],Enterprise Segment 와 외부시스템의 카테고리 이름을 번역,[object Object],SERVICE,[object Object],Booking Application 에서 하던 business rule 작업(Cargo 배치)과 Enterprise Segment 생성 책임을 Allocation Checker 으로 넘긴다.,[object Object],Allocation Checker 가 Enterprise Segments 로 만들 수 없는 차원은 Sales Management System 에서 쓸 수 없다는 단점이 있다,[object Object]
성능 문제,[object Object],Sales Management System 이 외부에 있다면?,[object Object],Allocation Checker 에 cache 한다.,[object Object],COM+ 에서 interface query 하는 방식도 있다,[object Object]
새로운 기능 추가하기 - 정리,[object Object],Sales Management System 을 Booking Application, Cargo Repository 와 통합하면서 복잡해졌지만, ANTICORRUPTION LAYER, SERVICE, ENTERPRISE SEGMENTS 를 도입하므로서 정돈되면서 도메인을 더 풍부하게 만들 수 있었다.,[object Object]
정리,[object Object],DDD 의 모델은 요리법(recipe) 처럼 만들어야 한다.,[object Object],모델만 봐도 구현할 수 있게 하되, 모델을 있는 그대로 구현하는 것이 아니라 상황에 맞게 적용할 수 있는 유연함이 필요하다.,[object Object],DDD 의 모델은 패턴언어와 비슷하다. 모델은 계속 같은 언어로 표현되면서 다른 모델과 관계를 맺는다.,[object Object]

More Related Content

What's hot

Hexagonal architecture - message-oriented software design
Hexagonal architecture  - message-oriented software designHexagonal architecture  - message-oriented software design
Hexagonal architecture - message-oriented software designMatthias Noback
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven DesignNader Albert
 
Choisir entre une API RPC, SOAP, REST, GraphQL? 
Et si le problème était ai...
Choisir entre une API  RPC, SOAP, REST, GraphQL?  
Et si le problème était ai...Choisir entre une API  RPC, SOAP, REST, GraphQL?  
Et si le problème était ai...
Choisir entre une API RPC, SOAP, REST, GraphQL? 
Et si le problème était ai...François-Guillaume Ribreau
 
Java version 11 - les 9 nouveautes
Java version 11 -  les 9 nouveautesJava version 11 -  les 9 nouveautes
Java version 11 - les 9 nouveautesAbdenour Bouateli
 
Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄Suhyeon Jo
 
Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄현 수
 
Domain Driven Design Quickly
Domain Driven Design QuicklyDomain Driven Design Quickly
Domain Driven Design QuicklyMariam Hakobyan
 
Applying Domain-Driven Design to craft Rich Domain Models
Applying Domain-Driven Design to craft Rich Domain ModelsApplying Domain-Driven Design to craft Rich Domain Models
Applying Domain-Driven Design to craft Rich Domain ModelsAlexander van Trijffel
 
Spring Framework - Data Access
Spring Framework - Data AccessSpring Framework - Data Access
Spring Framework - Data AccessDzmitry Naskou
 
Hexagonal architecture with Spring Boot
Hexagonal architecture with Spring BootHexagonal architecture with Spring Boot
Hexagonal architecture with Spring BootMikalai Alimenkou
 
Domain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) DistilledDomain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) DistilledNicola Costantino
 
CQRS and Event Sourcing for Java Developers
CQRS and Event Sourcing for Java DevelopersCQRS and Event Sourcing for Java Developers
CQRS and Event Sourcing for Java DevelopersMarkus Eisele
 
Flyweight Design Pattern
Flyweight Design PatternFlyweight Design Pattern
Flyweight Design PatternVarun MC
 
Hibernate architecture
Hibernate architectureHibernate architecture
Hibernate architectureAnurag
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design Introductionwojtek_s
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)Tom Kocjan
 

What's hot (20)

Hexagonal architecture - message-oriented software design
Hexagonal architecture  - message-oriented software designHexagonal architecture  - message-oriented software design
Hexagonal architecture - message-oriented software design
 
MVVM & RxSwift
MVVM & RxSwiftMVVM & RxSwift
MVVM & RxSwift
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 
Domain Driven Design
Domain Driven Design Domain Driven Design
Domain Driven Design
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Choisir entre une API RPC, SOAP, REST, GraphQL? 
Et si le problème était ai...
Choisir entre une API  RPC, SOAP, REST, GraphQL?  
Et si le problème était ai...Choisir entre une API  RPC, SOAP, REST, GraphQL?  
Et si le problème était ai...
Choisir entre une API RPC, SOAP, REST, GraphQL? 
Et si le problème était ai...
 
Java version 11 - les 9 nouveautes
Java version 11 -  les 9 nouveautesJava version 11 -  les 9 nouveautes
Java version 11 - les 9 nouveautes
 
Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄Domain-Driven-Design 정복기 2탄
Domain-Driven-Design 정복기 2탄
 
Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄
 
Domain Driven Design Quickly
Domain Driven Design QuicklyDomain Driven Design Quickly
Domain Driven Design Quickly
 
Applying Domain-Driven Design to craft Rich Domain Models
Applying Domain-Driven Design to craft Rich Domain ModelsApplying Domain-Driven Design to craft Rich Domain Models
Applying Domain-Driven Design to craft Rich Domain Models
 
Spring Framework - Data Access
Spring Framework - Data AccessSpring Framework - Data Access
Spring Framework - Data Access
 
Hexagonal architecture with Spring Boot
Hexagonal architecture with Spring BootHexagonal architecture with Spring Boot
Hexagonal architecture with Spring Boot
 
Domain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) DistilledDomain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) Distilled
 
CQRS and Event Sourcing for Java Developers
CQRS and Event Sourcing for Java DevelopersCQRS and Event Sourcing for Java Developers
CQRS and Event Sourcing for Java Developers
 
Flyweight Design Pattern
Flyweight Design PatternFlyweight Design Pattern
Flyweight Design Pattern
 
Hibernate architecture
Hibernate architectureHibernate architecture
Hibernate architecture
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design Introduction
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 

Viewers also liked

Holub on Patterns 1장 전
Holub on Patterns 1장 전Holub on Patterns 1장 전
Holub on Patterns 1장 전홍준 김
 
[NHN NEXT] Java 강의 - Week4
[NHN NEXT] Java 강의 - Week4[NHN NEXT] Java 강의 - Week4
[NHN NEXT] Java 강의 - Week4Young-Ho Cho
 
즉흥연기와프로그래밍
즉흥연기와프로그래밍즉흥연기와프로그래밍
즉흥연기와프로그래밍Ryan Park
 
Programming Game AI by Example. Ch7. Raven
Programming Game AI by Example. Ch7. RavenProgramming Game AI by Example. Ch7. Raven
Programming Game AI by Example. Ch7. RavenRyan Park
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
AIbyExample - Ch7 raven. version 0.8
AIbyExample - Ch7 raven. version 0.8AIbyExample - Ch7 raven. version 0.8
AIbyExample - Ch7 raven. version 0.8Ryan Park
 
나도기술서번역한번해볼까 in NDC10
나도기술서번역한번해볼까 in NDC10나도기술서번역한번해볼까 in NDC10
나도기술서번역한번해볼까 in NDC10Ryan Park
 
나도(기술서)번역한번해볼까
나도(기술서)번역한번해볼까나도(기술서)번역한번해볼까
나도(기술서)번역한번해볼까Ryan Park
 
온라인 게임에서 사례로 살펴보는 디버깅
온라인 게임에서 사례로 살펴보는 디버깅온라인 게임에서 사례로 살펴보는 디버깅
온라인 게임에서 사례로 살펴보는 디버깅Ryan Park
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010Ryan Park
 
Unicode 이해하기
Unicode 이해하기Unicode 이해하기
Unicode 이해하기Ryan Park
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10Ryan Park
 
위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점Ryan Park
 
문자셋과 인코딩
문자셋과 인코딩문자셋과 인코딩
문자셋과 인코딩Jaehoon Jung
 
Oop design principle SOLID
Oop design principle SOLIDOop design principle SOLID
Oop design principle SOLIDRyan Park
 

Viewers also liked (20)

Holub on Patterns 1장 전
Holub on Patterns 1장 전Holub on Patterns 1장 전
Holub on Patterns 1장 전
 
[NHN NEXT] Java 강의 - Week4
[NHN NEXT] Java 강의 - Week4[NHN NEXT] Java 강의 - Week4
[NHN NEXT] Java 강의 - Week4
 
즉흥연기와프로그래밍
즉흥연기와프로그래밍즉흥연기와프로그래밍
즉흥연기와프로그래밍
 
Taocp1 2 4
Taocp1 2 4Taocp1 2 4
Taocp1 2 4
 
Unicode
UnicodeUnicode
Unicode
 
Programming Game AI by Example. Ch7. Raven
Programming Game AI by Example. Ch7. RavenProgramming Game AI by Example. Ch7. Raven
Programming Game AI by Example. Ch7. Raven
 
Unicode
UnicodeUnicode
Unicode
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
AIbyExample - Ch7 raven. version 0.8
AIbyExample - Ch7 raven. version 0.8AIbyExample - Ch7 raven. version 0.8
AIbyExample - Ch7 raven. version 0.8
 
나도기술서번역한번해볼까 in NDC10
나도기술서번역한번해볼까 in NDC10나도기술서번역한번해볼까 in NDC10
나도기술서번역한번해볼까 in NDC10
 
나도(기술서)번역한번해볼까
나도(기술서)번역한번해볼까나도(기술서)번역한번해볼까
나도(기술서)번역한번해볼까
 
온라인 게임에서 사례로 살펴보는 디버깅
온라인 게임에서 사례로 살펴보는 디버깅온라인 게임에서 사례로 살펴보는 디버깅
온라인 게임에서 사례로 살펴보는 디버깅
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
 
Unicode 이해하기
Unicode 이해하기Unicode 이해하기
Unicode 이해하기
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
 
위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점
 
문자셋과 인코딩
문자셋과 인코딩문자셋과 인코딩
문자셋과 인코딩
 
DDD 산책
DDD 산책DDD 산책
DDD 산책
 
Unicode100
Unicode100Unicode100
Unicode100
 
Oop design principle SOLID
Oop design principle SOLIDOop design principle SOLID
Oop design principle SOLID
 

Similar to Domain Driven Design Ch7

DDD-07-Using The Language
DDD-07-Using The LanguageDDD-07-Using The Language
DDD-07-Using The LanguageKyungryul KIM
 
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발LGU+
 
분산 트랜잭션 환경에서 데이터 일관성 유지 방안 업로드용
분산 트랜잭션 환경에서 데이터 일관성 유지 방안 업로드용분산 트랜잭션 환경에서 데이터 일관성 유지 방안 업로드용
분산 트랜잭션 환경에서 데이터 일관성 유지 방안 업로드용승필 박
 
From event storming to spring cloud implementation
From event storming to spring cloud implementationFrom event storming to spring cloud implementation
From event storming to spring cloud implementationuEngine Solutions
 
Chapter3 클래스의기본(윤현성)
Chapter3 클래스의기본(윤현성)Chapter3 클래스의기본(윤현성)
Chapter3 클래스의기본(윤현성)Hyun Sung Yoon
 
Chapter3 클래스의기본(윤현성)
Chapter3 클래스의기본(윤현성)Chapter3 클래스의기본(윤현성)
Chapter3 클래스의기본(윤현성)Hyun Sung Yoon
 
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원탑크리에듀(구로디지털단지역3번출구 2분거리)
 
From event storming to spring cloud implementation
From event storming to spring cloud implementationFrom event storming to spring cloud implementation
From event storming to spring cloud implementationuEngine Solutions
 

Similar to Domain Driven Design Ch7 (9)

DDD-07-Using The Language
DDD-07-Using The LanguageDDD-07-Using The Language
DDD-07-Using The Language
 
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발 구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
구글 기술을 이용한 모바일 클라우드 애플리케이션 개발
 
분산 트랜잭션 환경에서 데이터 일관성 유지 방안 업로드용
분산 트랜잭션 환경에서 데이터 일관성 유지 방안 업로드용분산 트랜잭션 환경에서 데이터 일관성 유지 방안 업로드용
분산 트랜잭션 환경에서 데이터 일관성 유지 방안 업로드용
 
From event storming to spring cloud implementation
From event storming to spring cloud implementationFrom event storming to spring cloud implementation
From event storming to spring cloud implementation
 
Chapter3 클래스의기본(윤현성)
Chapter3 클래스의기본(윤현성)Chapter3 클래스의기본(윤현성)
Chapter3 클래스의기본(윤현성)
 
Chapter3 클래스의기본(윤현성)
Chapter3 클래스의기본(윤현성)Chapter3 클래스의기본(윤현성)
Chapter3 클래스의기본(윤현성)
 
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#2] 고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
 
From event storming to spring cloud implementation
From event storming to spring cloud implementationFrom event storming to spring cloud implementation
From event storming to spring cloud implementation
 
Redux
ReduxRedux
Redux
 

More from Ryan Park

KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기Ryan Park
 
Oop design principle
Oop design principleOop design principle
Oop design principleRyan Park
 
프로그램은 왜 실패하는가 1장
프로그램은 왜 실패하는가 1장프로그램은 왜 실패하는가 1장
프로그램은 왜 실패하는가 1장Ryan Park
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
 
UnitTest, Tdd For Games Kgc2007 ParkPD
UnitTest, Tdd For Games Kgc2007 ParkPDUnitTest, Tdd For Games Kgc2007 ParkPD
UnitTest, Tdd For Games Kgc2007 ParkPDRyan Park
 
Agile Test Driven Development For Games What, Why, And How
Agile Test Driven Development For Games What, Why, And HowAgile Test Driven Development For Games What, Why, And How
Agile Test Driven Development For Games What, Why, And HowRyan Park
 
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd   Test Driven Development For Games What, Why, And How)(Game Connect 2006...Agd   Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...Ryan Park
 

More from Ryan Park (8)

KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기
 
Unicode
UnicodeUnicode
Unicode
 
Oop design principle
Oop design principleOop design principle
Oop design principle
 
프로그램은 왜 실패하는가 1장
프로그램은 왜 실패하는가 1장프로그램은 왜 실패하는가 1장
프로그램은 왜 실패하는가 1장
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
UnitTest, Tdd For Games Kgc2007 ParkPD
UnitTest, Tdd For Games Kgc2007 ParkPDUnitTest, Tdd For Games Kgc2007 ParkPD
UnitTest, Tdd For Games Kgc2007 ParkPD
 
Agile Test Driven Development For Games What, Why, And How
Agile Test Driven Development For Games What, Why, And HowAgile Test Driven Development For Games What, Why, And How
Agile Test Driven Development For Games What, Why, And How
 
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd   Test Driven Development For Games What, Why, And How)(Game Connect 2006...Agd   Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
 

Domain Driven Design Ch7

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 12.
  • 14.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 22.
  • 23.
  • 24.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.