SlideShare a Scribd company logo
1 of 23
Download to read offline
Domain-Driven Design
     chois79




12년 10월 8일 월요일
DDD(Domain-Driven Design)

     • 가장 중요한 복잡성은 기술적인 것이 아닌 업무        도메인이다.

          • DDD의 목표: 복잡한 도메인을 다뤄야 하는 소프트웨어 프로젝트에 박차를 가하는 것


          • 이 책의 전제


                 • 대부분의 소프트웨어 프로젝트에서는 가장 먼저 도메인과 도메인 로직에 집중해야 한다


                 • 복잡한 도메인 설계는 모델을 기반으로 해야한다


          • DDD를 위한 선행 조건


                 • 개발은 반복적인 주기를 토대로 진행되어야 한다


                 • 개발자와 도메인 전문가는 밀접한 관계에 있어야 한다



12년 10월 8일 월요일
이 책의 구성

     • 1부, 동작하는 도메인 만들기


          • DDD의 배경 및 목표 제시


     • 2부, 모델 주도 설계의 기본


          • 모델과 실제 동작하는 소프트웨어 사이의 간극을 줄이는 법


     • 3부, 더 심층적인 통찰력을 향한 리팩터링


          • 반복적인 단계를 통한 모델의 정련


     • 4부, 전략적 설계


          • 복잡한 시스템, 더 큰 조직, 외부 시스템 및 기존 시스템과의 상호 작용



12년 10월 8일 월요일
1부 동작하는 도메인 모델 만들기




12년 10월 8일 월요일
개요(1/2)

     • 모델이란?


          • 대상을 단순화 한것


          • 어떤 사실을 해석한 것


          • 당면한 문제를 해결하는 것과 관련된 측면을 추상화


          • 중요하지 않은 세부사항은 고려하지 않음




12년 10월 8일 월요일
개요(2/2)

     • 소프트웨어의 도메인


          • 사용자가 프로그램을 사용하는 대상 영역


          • 대게의 경우 컴퓨터와 관련이 없음


          • 좋은 소프트웨어를 만들기 위해서는 도메인에 대한 폭 넓은 지식이 필요


                 • 도메인 지식은 복잡하고 양이 많음


                 • 모델 적용 필요


                   • 도메인 모델: 해당 지식을 엄격하게 구성하고, 선택적으로 추상화 한것


12년 10월 8일 월요일
소프트웨어의 본질

     • 사용자를 위해 도메인에 관련된 문제를 해결하는 것


     • 도메인 연구는 소프트웨어 프로젝트에서 최우선 과제로 여겨지지 않는다


          • 개발자는 자신의 실력을 훈련할수 있는 정량적인 문제를 추구함


          • 도메인 업무는 무질서하고 개발자로서의 능력에 보탬이 될것 같지 않은 복잡하고 새로운 지식을 많이 요구


          • 재능이 있는 기술자는 정교한 프레임워크 개발을 통해 기술을 바탕으로 문제를 해결하려 함


          • 도메인을 학습하고 모델링하는 일은 다른이들의 몫으로 남겨둔다


     • But, 소프트웨어 중심에 있는 복잡성은 정면으로 돌파해야 함


          • 그렇지 않을 경우, 도메인과 무관한 소프트웨어를 만들 수 있다.




12년 10월 8일 월요일
1부 에서는

     • 모델은 지식의 정수만을 뽑아낸 것이다. - 1장


     • 모델은 모든 팀 구성원이 사용하는 언어의 중추다 - 2장


     • 모델과 핵심 설계는 서로 영향을 주며 구체화 된다 - 3장




12년 10월 8일 월요일
Ch.1 지식 탐구




12년 10월 8일 월요일
going to lead to the leap forward in productivity that they were looking for.
We tried having the PCB designers tell me exactly what the software should do. Bad idea. They
were great circuit designers, but their software ideas was a glimmer of hope in the reports they
             The first few meetings were discouraging, but there usually involved reading in an ASCII file,
sorting it, writing it backalways involved "nets" and various and producing a A net, in this domain, clearly not
             asked for. They out with some annotation, details about them. report. This was is
             essentially a wire conductor that can connect any number of components on a PCB and carry an
going to lead to thesignal to everything it is connected to. We had the first element offor. domain model.
                         leap forward in productivity that they were looking the
      PCB 분석were discouraging, but there was a glimmer of hope in the reports they
             electrical

The first few meetings
                       예제(1/5)
asked for. They always involved "nets" and various details about them. A net, in this domain, is
                                              Figure 1.1.
essentially a wire conductor that can connect any number of components on a PCB and carry an
      •
electrical signal 모델의 첫번째it요소
        도메인 to everything is connected to. We had the first element of the domain model.


           • 네트를 통해 컴포넌트를 연결하고, 전기 신호를 전달
                             Figure 1.1.

              I started drawing diagrams for them as we discussed the things they wanted the software to do. I
              used an informal variant of object interaction diagrams to walk through scenarios.




                                                          Figure 1.2.




I started drawing diagrams for them as we discussed the things they wanted the software to do. I
used an informal variant of object interaction diagrams to walk through scenarios.




                                                       Figure 1.2.




 12년 10월 8일 월요일
Expert 1: It isn't enough to say a signal arrives at a ref-des, we have to know the pin.

      Developer: Ref-des?

      Expert 2: Same thing as a component instance. Ref-des is what it's called in a particular tool we
     PCB 분석 예제(2/5)
      use.

      Expert 1: Anyhow, a net connects a particular pin of one instance to a particular pin of another.

      Developer: Are you saying that a pin belongs to only one component instance and connects to
     • 반복 커뮤니케이션 을 통한 정제
      only one net?

      Expert 1: Yes, that's right.

      Expert 2: Also, every net has a topology, an arrangement that determines the way the elements
        • 컨포넌트 인스턴스로 이름을 변경
      of the net connect.

      Developer: OK, how about this?

        • Pin과 Topology 추가
                                                  Figure 1.3.




      To focus our exploration, we limited ourselves, for a while, to studying one particular feature. A

12년 10월 8일 월요일
"probe simulation" would trace the propagation of a signal to detect likely sites of certain kinds of
                 problems in the design.

                 Developer: I understand how the signal gets carried by the Net to all the Pins attached, but how
                 does it go any further than that? Does the Topology have something to do with it?


     PCB 분석 예제(3/5)
                 Expert 2: No. The component pushes the signal through.

                 Developer: We certainly can't model the internal behavior of a chip. That's way too complicated.

                 Expert 2: We don't have to. We can use a simplification. Just a list of pushes through the
                 component from certain Pins to certain others.

                 Developer: Something like this?
     • 한가지 시나리오를 고려한 집중
                 [With considerable trial-and-error, together we sketched out a scenario.]




          • “탐침 시뮬레이션”
                                                              Figure 1.4.




          • 홈 로직 적용
                 Developer: But what exactly do you need to know from this computation?

                 Expert 2: We'd be looking for long signal delays—say, any signal path that was more than two or
                 three hops. It's a rule of thumb. If the path is too long, the signal may not arrive during the clock
                 cycle.

                 Developer: More than three hops.... So we need to calculate the path lengths. And what counts
                 as a hop?

                 Expert 2: Each time the signal goes over a Net, that's one hop.

                 Developer: So we could pass the number of hops along, and a Net could increment it, like this.




                                                              Figure 1.5.


12년 10월 8일 월요일
PCB 분석 예제(4/5)
          Developer: The only part that isn't clear to me is where the "pushes" come from. Do we store
          that data for every Component Instance?

          Expert 2: The pushes would be the same for all the instances of a component.
     • 도메인 로직 분석 of component determines the pushes. They'll be the same for every
        Developer: So the type
          instance?


          • 신호 전달
                                                       Figure 1.6.




          Expert 2: I'm not sure exactly what some of this means, but I would imagine storing push-
          throughs for each component would look something like that.

          Developer: Sorry, I got a little too detailed there. I was just thinking it through. . . . So, now,
          where does the Topology come into it?
12년 10월 8일 월요일
PCB 분석 예제(5/5)
                  their understanding of how the model would play into the solution. A class diagram representing
                  that early model looks something like this.




     • 모델을 바탕으로한 클래스 다이어 그램Figure 1.7.




     • 무엇을 한 것인가? more part-time days of this, I automated test framework. Iattempt some code. I
            After a couple
            wrote a very simple prototype, driven by an
                                                        felt I understood enough to
                                                                                    avoided all
                  infrastructure. There was no persistence, and no user interface (UI). This allowed me to
                  concentrate on the behavior. I was able to demonstrate a simple probe simulation in just a few
                  more days. Although it used dummy data and wrote raw text to the console, it was nonetheless
          • PCB 엔지니어 -> 개발자: 도메인 설명
                  doing the actual computation of path lengths using Java objects. Those Java objects reflected a
                  model shared by the domain experts and myself.

                  The concreteness of this prototype made clearer to the domain experts what the model meant and
                  how it related to the functioning software. From that point, our model discussions became more
          • 개발자 -> PCB 엔지니어: 객체의 상호 작용 방식에 관한 시나리오 설명
                  interactive, as they could see how I incorporated my newly acquired knowledge into the model and
                  then into the software. And they had concrete feedback from the prototype to evaluate their own
                  thoughts.

                  Embedded in that model, which naturally became much more complicated than the one shown
          • PCB 엔지니어와 개발자가 함께 브레인 스토밍을 통해 모델을 정제
                  here, was knowledge about the domain of PCB relevant to the problems we were solving. It
                  consolidated many synonyms and slight variations in descriptions. It excluded hundreds of facts
                  that the engineers understood but that were not directly relevant, such as the actual digital
                  features of the components. A software specialist like me could look at the diagrams and in
                  minutes start to get a grip on what the software was about. He or she would have a framework to
                  organize new information and learn faster, to make better guesses about what was important and
                  what was not, and to communicate better with the PCB engineers.
12년 10월 8일 월요일
효과적인 모델링의 요소

     • 모델과 구현의 연계


     • 모델을 기반으로 하는 언어 정제


     • 풍부한 지식이 담긴 모델 개발


     • 모델의 정제


     • 브레인 스토밍과 실험




12년 10월 8일 월요일
지식 탐구

     • 복잡한 도메인으로 부터 추상화하여 특정 지식을 엄밀히 표현하는 모델을 만들어 나가는 활동


     • 폭포수 개발 방식


          • 지식이 한 방향으로 흘러갈뿐 축척되지 않는다.


     • 반복 프로세스를 활용한 방식


          • 소프트웨어를 확장 가능한 상태로 유지 가능


          • But, 프로그래머가 도메인에 관심이 없다면, 소프트웨어가 높은 수준에 이르기는 힘듬


     • 지식 탐구는 혼자서 하는 활동이 아닌 개발자와 도메인 전문가가 함께 협업해야함


     • 모델은 완벽해 질수 없으며, 다만 계속해서 발전해나갈 뿐이다.



12년 10월 8일 월요일
지속적인 학습

     • 소프트웨어를 개발하기 시작할때 우리는 충분히 알지 못한 상태에서 시작한다


     • 모든 프로젝트에서는 지식이 새기 마련이다.


          • 조직개편, 외주 제작


     • 생산성이 뛰어난 팀은 지속적인 학습을 바탕으로 의식적으로 지식을 함양


          • 핵심적인 부분을 개발하는데 초첨을 맞춘 고정 핵심 인력 양성을 통한 지식 축적


     • 지식 탐구 프로세스 확립 필요


          • 똑같이 지식을 얻고 의사소통 체계를 공유하며, 구현을 거쳐 피드백 고리를 완성하는 일을 모두
            효과적으로 수행해야 함



12년 10월 8일 월요일
Example
                    [ Team LiB ]

                       Extracting a Hidden Concept
                    Knowledge-Rich Design
         Let's start 담긴 설계 (1/4)
     풍부한 지식이 withvoyage of a ship. model that could be the basis of an application for
                       a very simple domain
                    The kind of knowledge captured in a model such as the PCB example goes beyond "find the
                    nouns." Business activities and rules are as central to a domain as are the entities involved; any
         cargos onto a
                    domain will have various categories of concepts. Knowledge crunching yields models that reflect
                    this kind of insight. In parallel with model changes, developers refactor the implementation to
                    express the model, giving the application use of that knowledge.

                    It is with this move beyond entities and values that knowledge crunching can get intense, because
                    there may be actual inconsistency among business rules. Domain experts are usually not aware of

     • 예제: 선박 화물 운송 예약 시스템
                    how complex their mental processes are as, in the course of their work, they navigate all these
                    rules, reconcile contradictions, and fill in gaps with common sense. Software can't do this. It is
                    through knowledge crunching in close collaboration with software experts that the rules are
                    clarified, fleshed out, reconciled, or placed out of scope.                                Figure 1.8.

                    Example
          • 간단한 도메인 Hidden Concept
               Extracting a 모델
                    Let's start with a very simple domain model that could be the basis of an application for booking
                    cargos onto a voyage of a ship.



                 • Cargo(화물), Voyage(운항)                        Figure 1.8.




                      We can state that the booking application's responsibility is to associate each Cargo wi
                   We can state that the booking application'sand tracking that Cargo with a
                      Voyage, recording responsibility is to associate each relationship. So far so good. Somewhere in the ap
                   Voyage, recording and tracking that relationship. So far so good. Somewhere in the application
          • 구현     코드 could be a method like this: a method like this:
                      code there could be
                   code there

                    public int makeBooking(Cargo cargo, Voyage voyage) {
                       int confirmation = orderConfirmationSequence.next();
                       public int makeBooking(Cargo cargo, Voyage voyage) {
                       voyage.addCargo(cargo, confirmation);
                       return confirmation;
                    }          int confirmation = orderConfirmationSequence.next();
                               voyage.addCargo(cargo, confirmation);
                    Because there are always last-minute cancellations, standard practice in the shipping industry is to
                    accept more cargo than a particular vessel can carry on a voyage. This is called "overbooking."
                    Sometimesreturn confirmation; booking 110 percent of capacity. In
                                a simple percentage of capacity is used, such as
                    other cases complex rules are applied, favoring major customers or certain kinds of cargo.
                       }


                       Because there are always last-minute cancellations, standard practice in the shipping in
12년 10월 8일 월요일
                       accept more cargo than a particular vessel can carry on a voyage. This is called "overbo
This is a basic strategy in the shipping domain that would be known to any businessperson in the
                           shipping industry, but it might not be understood by all technical people on a software team.


     풍부한 지식이 담긴 설계 (2/4)
                           The requirements document contains this line:

           This is a basic strategy in the10% overbooking.
                                 Allow shipping domain that would be known to any businessperson in the
           shipping industry, but it might not be understood by all technical people on a software team.
                       The class diagram and code
           The requirements document contains this line:           now look like this:
                    Allow 10% overbooking.

     • 비즈니스 요구사항code now look like this:
         The class diagram and 반영

                                                                                        Figure 1.9.

          • 10% 초과 예약 허용                                 Figure 1.9.




          • public int makeBooking(Cargo
              구현 코드                        cargo, Voyage voyage) {
                 double maxBooking = voyage.capacity() * 1.1;
                 if ((voyage.bookedCargoSize() + cargo.size()) > maxBooking)Voyage voyage)
                         public int makeBooking(Cargo cargo,                                                      {
                     return –1;
                             double maxBooking = voyage.capacity() * 1.1;
                 int confirmation = orderConfirmationSequence.next();
                             if ((voyage.bookedCargoSize() + cargo.size()) >
                 voyage.addCargo(cargo, confirmation);                                                            maxBooking)
                                   return –1;
                 return confirmation;
           }
                              int confirmation = orderConfirmationSequence.next();
                              voyage.addCargo(cargo, confirmation);
           Now an important business rule is hidden as a guard clause in an application method. Later, in
                              return confirmation;
           Chapter 4, we'll look at the principle of LAYERED ARCHITECTURE, which would guide us to move the
           over-booking}rule into a domain object, but for now let's concentrate on how we could make this
           knowledge more explicit and accessible to everyone on the project. This will bring us to a similar
           solution.
          • 문제점 Now an important business rule is hidden as a guard clause in an application method. Later, in
               1. As written, it is unlikely that any business expert could read this code to verify the rule, even
                          Chapter 4, we'll look at the principle of LAYERED ARCHITECTURE,                           which would guide us to move the
                  with the guidance of a developer.
                             over-booking rule into a domain object, but for now let's concentrate on how we could make this
               2.
                    •the 개발자의 도움이 있더라도and accessible to everyone 읽고 규칙을 검증하지 못함 us to a similar
                             knowledge more explicit 업무전문가가 이 코드를 on the project. This will bring
                     It would be difficult for a technical, non-businessperson to connect the requirement text with
                         code.
                             solution.
           If the rule were more complex, that much more would be at stake.

           We can change the design to better capture this knowledge. The overbooking rule is a policy.
                    • 기술적인 측면만 담당하는 사람은 코드와 요구사항을 결부시키기가 어려울 것
           Policy is another name for the designit is unlikely that any business expert is
                           1. As written, pattern known as STRATEGY (Gamma et al. 1995). It could read this code to verify the rule, even
           usually motivated bywith the guidance of a developer. not needed here, as far as we
                                the need to substitute different rules, which is
           know. But the concept we are trying to capture does fit the meaning of a policy, which is an
           equally important motivation in domain-driven design. (See Chapter 12, "Relating Design Patterns
           to the Model.") 2. It would be difficult for a technical, non-businessperson to connect the requirement text with
                                  the code.

12년 10월 8일 월요일             If the rule were moreFigure 1.10. that much more would be at stake.
                                                 complex,
풍부한 지식이 담긴 설계 (3/4)

     • Strategy Pattern 적용




                          The code is now:

                          public int makeBooking(Cargo cargo, Voyage voyage) {
                           The code is now:
          • 코드                  if (!overbookingPolicy.isAllowed(cargo, voyage)) return –1;
                           The code is now:

                                int confirmation = orderConfirmationSequence.next();
                           public int makeBooking(Cargo cargo, Voyage voyage) {
                           public int makeBooking(Cargo confirmation);
                                voyage.addCargo(cargo, cargo, Voyage voyage) {
                              if (!overbookingPolicy.isAllowed(cargo, voyage)) return –1;
                              int confirmation = orderConfirmationSequence.next();
                                 if (!overbookingPolicy.isAllowed(cargo, voyage)) return –1;
                                return confirmation;
                              voyage.addCargo(cargo, confirmation);
                                 int confirmation = orderConfirmationSequence.next();
                              return confirmation;
                          }}
                                 voyage.addCargo(cargo, confirmation);
                                 return confirmation;
                           The new Overbooking Policy class contains this method:

                           }
                          The new Overbooking Policy class contains this method:
                           public boolean isAllowed(Cargo cargo, Voyage voyage) {
                              return (cargo.size() + voyage.bookedCargoSize()) <=

                 • 초과 예약 정책}
                                     (voyage.capacity() * 1.1);

                       The new Overbooking Policy class contains this method:
                          public boolean isAllowed(Cargo cargo, that rule is
                           It will be clear to all that overbooking is a distinct policy, and the implementation of
                                                                                                                    Voyage voyage) {
                           explicit and separate. (cargo.size() + voyage.bookedCargoSize()) <=
                                  return
                            public boolean that such an elaborate design be cargo, Voyage voyage) {
                                                              isAllowed(Cargo applied to
                                                 (voyage.capacity() focus on the every detail of minimize
                           Now, I am not recommending
                           domain. Chapter 15, (cargo.size() + voyage.bookedCargoSize()) <=
                                                                                                * 1.1);                the
                                    return "Distillation," goes into depth on how to                     important and
                          }or separate everythingcan be This example is and share show that a domain model anddesign has
                           corresponding design
                                                      else.                 meant to
                                                 (voyage.capacity()knowledge. The more explicit
                                                            used to secure                * 1.1);
                           these advantages:
                           }
                          It 1. In order toclear design tonature of overbooking as a distincteveryonedistinct will
                              will be bring the to the this stage,overbooking and important businesspolicy, and the implementation of that rule is
                                have come to understand
                                                        all that the programmers and is a else involved
12년 10월 8일 월요일            explicit and separate. overbooking is a distinct policy, and the implementation of that rule is
                           It will not just an obscure all that
                                rule, be clear to calculation.
풍부한 지식이 담긴 설계 (4/4)

     • 적용 결과


          • 초과 예약 정책이 별개의 정책이라는 사실을 모두가 알수 있음


          • 정책 구현이 명시적으로 드러나고 다른 구현가 분리 됨


     • 저자의 의견


          • 도메인의 모든 세부 사항에 이러한 정교한 설계를 적용하라는 것은 아니다


     • 명시적인 설계의 이점


          • 프로그래머와 그 밖의 모든 이가 중요한 업무 규칙임을 알게 되었음


          • 프로그래머는 업무 전문가에게 그들이 이해할 수 있는 수준으로 기술적 산출물, 심지어 코드까지 보여 줄수 있
            으며 이를 통해 피드백 고리가 완성됨



12년 10월 8일 월요일
심층 모델

     • 유용한 모델은 겉으로 드러나 있는 경우가 거의 없다.


          • 도메인과 애플리케이션 요구사항을 이해하게 되면 처음에 생각했던 모델 요소를 버리
            거나 관점을 바꾸게 됨


          • 이를 통해 문제의 핵심을 관통하는 포착하기 힘든 추상화가 서서히 나타남


     • 지식 탐구는 탐험과도 같아서 어디서 끝나게 될지 알지 못한다.




12년 10월 8일 월요일
요약

     • 소프트웨어의 복잡도는 도메인의 복잡도에서 비롯된다


     • 수준 높은 소프트웨어 개발을 위해서는


          • 도메인 전문가, 설계자, 개발자 모두가 도메인 지식을 갖추고 지속적으로 커뮤니케이션을 해야 한다.


          • 이의 결과물인 도메인 모델은 분석, 설계, 개발 관점의 모든 사항을 반영할 수 있도록 지속적으로 발
            전되어야 한다.


     • 개발자 관점


          • 도메인에 대한 지식을 갖추도록 해야 함


          • 도메인과 관련된 지식을 코드에 최대한 반영해야 함




12년 10월 8일 월요일

More Related Content

What's hot

Synthetic dialogue generation with Deep Learning
Synthetic dialogue generation with Deep LearningSynthetic dialogue generation with Deep Learning
Synthetic dialogue generation with Deep LearningS N
 
Deep Learning and the state of AI / 2016
Deep Learning and the state of AI / 2016Deep Learning and the state of AI / 2016
Deep Learning and the state of AI / 2016Grigory Sapunov
 
An Introduction to Deep Learning
An Introduction to Deep LearningAn Introduction to Deep Learning
An Introduction to Deep LearningPoo Kuan Hoong
 
Hadoop Summit 2014 - San Jose - Introduction to Deep Learning on Hadoop
Hadoop Summit 2014 - San Jose - Introduction to Deep Learning on HadoopHadoop Summit 2014 - San Jose - Introduction to Deep Learning on Hadoop
Hadoop Summit 2014 - San Jose - Introduction to Deep Learning on HadoopJosh Patterson
 
Start a deep learning startup - tutorial
Start a deep learning startup - tutorialStart a deep learning startup - tutorial
Start a deep learning startup - tutorialMostapha Benhenda
 
GPU Programming: Chicago CocoaConf 2015
GPU Programming: Chicago CocoaConf 2015GPU Programming: Chicago CocoaConf 2015
GPU Programming: Chicago CocoaConf 2015Janie Clayton
 
Deep Learning Cases: Text and Image Processing
Deep Learning Cases: Text and Image ProcessingDeep Learning Cases: Text and Image Processing
Deep Learning Cases: Text and Image ProcessingGrigory Sapunov
 
DEF CON 24 - Clarence Chio - machine duping 101
DEF CON 24 - Clarence Chio - machine duping 101DEF CON 24 - Clarence Chio - machine duping 101
DEF CON 24 - Clarence Chio - machine duping 101Felipe Prado
 
DSRLab seminar Introduction to deep learning
DSRLab seminar   Introduction to deep learningDSRLab seminar   Introduction to deep learning
DSRLab seminar Introduction to deep learningPoo Kuan Hoong
 
A powerful comparison of deep learning frameworks for Arabic sentiment analysis
A powerful comparison of deep learning frameworks for Arabic sentiment analysis A powerful comparison of deep learning frameworks for Arabic sentiment analysis
A powerful comparison of deep learning frameworks for Arabic sentiment analysis IJECEIAES
 
MDEC Data Matters Series: machine learning and Deep Learning, A Primer
MDEC Data Matters Series: machine learning and Deep Learning, A PrimerMDEC Data Matters Series: machine learning and Deep Learning, A Primer
MDEC Data Matters Series: machine learning and Deep Learning, A PrimerPoo Kuan Hoong
 
Julia: A modern language for software 2.0
Julia: A modern language for software 2.0Julia: A modern language for software 2.0
Julia: A modern language for software 2.0Viral Shah
 
Deep Learning - A Literature survey
Deep Learning - A Literature surveyDeep Learning - A Literature survey
Deep Learning - A Literature surveyAkshay Hegde
 
Feedback on Part 1 of the CSLP
Feedback on Part 1 of the CSLPFeedback on Part 1 of the CSLP
Feedback on Part 1 of the CSLPStephen Gilmore
 
Deep learning - Conceptual understanding and applications
Deep learning - Conceptual understanding and applicationsDeep learning - Conceptual understanding and applications
Deep learning - Conceptual understanding and applicationsBuhwan Jeong
 
Spark MLlib and Viral Tweets
Spark MLlib and Viral TweetsSpark MLlib and Viral Tweets
Spark MLlib and Viral TweetsAsim Jalis
 
Design Patterns Presentation - Chetan Gole
Design Patterns Presentation -  Chetan GoleDesign Patterns Presentation -  Chetan Gole
Design Patterns Presentation - Chetan GoleChetan Gole
 

What's hot (20)

Synthetic dialogue generation with Deep Learning
Synthetic dialogue generation with Deep LearningSynthetic dialogue generation with Deep Learning
Synthetic dialogue generation with Deep Learning
 
Deep Learning and the state of AI / 2016
Deep Learning and the state of AI / 2016Deep Learning and the state of AI / 2016
Deep Learning and the state of AI / 2016
 
An Introduction to Deep Learning
An Introduction to Deep LearningAn Introduction to Deep Learning
An Introduction to Deep Learning
 
Hadoop Summit 2014 - San Jose - Introduction to Deep Learning on Hadoop
Hadoop Summit 2014 - San Jose - Introduction to Deep Learning on HadoopHadoop Summit 2014 - San Jose - Introduction to Deep Learning on Hadoop
Hadoop Summit 2014 - San Jose - Introduction to Deep Learning on Hadoop
 
Start a deep learning startup - tutorial
Start a deep learning startup - tutorialStart a deep learning startup - tutorial
Start a deep learning startup - tutorial
 
GPU Programming: Chicago CocoaConf 2015
GPU Programming: Chicago CocoaConf 2015GPU Programming: Chicago CocoaConf 2015
GPU Programming: Chicago CocoaConf 2015
 
Deep Learning Cases: Text and Image Processing
Deep Learning Cases: Text and Image ProcessingDeep Learning Cases: Text and Image Processing
Deep Learning Cases: Text and Image Processing
 
DEF CON 24 - Clarence Chio - machine duping 101
DEF CON 24 - Clarence Chio - machine duping 101DEF CON 24 - Clarence Chio - machine duping 101
DEF CON 24 - Clarence Chio - machine duping 101
 
DSRLab seminar Introduction to deep learning
DSRLab seminar   Introduction to deep learningDSRLab seminar   Introduction to deep learning
DSRLab seminar Introduction to deep learning
 
Understanding deep learning
Understanding deep learningUnderstanding deep learning
Understanding deep learning
 
A powerful comparison of deep learning frameworks for Arabic sentiment analysis
A powerful comparison of deep learning frameworks for Arabic sentiment analysis A powerful comparison of deep learning frameworks for Arabic sentiment analysis
A powerful comparison of deep learning frameworks for Arabic sentiment analysis
 
MDEC Data Matters Series: machine learning and Deep Learning, A Primer
MDEC Data Matters Series: machine learning and Deep Learning, A PrimerMDEC Data Matters Series: machine learning and Deep Learning, A Primer
MDEC Data Matters Series: machine learning and Deep Learning, A Primer
 
Julia: A modern language for software 2.0
Julia: A modern language for software 2.0Julia: A modern language for software 2.0
Julia: A modern language for software 2.0
 
Deep Learning - A Literature survey
Deep Learning - A Literature surveyDeep Learning - A Literature survey
Deep Learning - A Literature survey
 
Feedback on Part 1 of the CSLP
Feedback on Part 1 of the CSLPFeedback on Part 1 of the CSLP
Feedback on Part 1 of the CSLP
 
Deep learning - Conceptual understanding and applications
Deep learning - Conceptual understanding and applicationsDeep learning - Conceptual understanding and applications
Deep learning - Conceptual understanding and applications
 
Spark MLlib and Viral Tweets
Spark MLlib and Viral TweetsSpark MLlib and Viral Tweets
Spark MLlib and Viral Tweets
 
Android and Deep Learning
Android and Deep LearningAndroid and Deep Learning
Android and Deep Learning
 
Design Patterns Presentation - Chetan Gole
Design Patterns Presentation -  Chetan GoleDesign Patterns Presentation -  Chetan Gole
Design Patterns Presentation - Chetan Gole
 
Chapter1
Chapter1Chapter1
Chapter1
 

Viewers also liked

Code 11 논리 게이트
Code 11 논리 게이트Code 11 논리 게이트
Code 11 논리 게이트HyeonSeok Choi
 
Domain driven design ch9
Domain driven design ch9Domain driven design ch9
Domain driven design ch9HyeonSeok Choi
 
MiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.MicroformatMiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.MicroformatHyeonSeok Choi
 
서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3HyeonSeok Choi
 
Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화HyeonSeok Choi
 
자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9HyeonSeok Choi
 
CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다HyeonSeok Choi
 
Mining the social web 6
Mining the social web 6Mining the social web 6
Mining the social web 6HyeonSeok Choi
 
SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템HyeonSeok Choi
 
프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14HyeonSeok Choi
 
자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2HyeonSeok Choi
 
컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5HyeonSeok Choi
 
실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7HyeonSeok Choi
 
실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6HyeonSeok Choi
 
서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2HyeonSeok Choi
 
HTTP 완벽가이드 16장
HTTP 완벽가이드 16장HTTP 완벽가이드 16장
HTTP 완벽가이드 16장HyeonSeok Choi
 
Mining the social web ch1
Mining the social web ch1Mining the social web ch1
Mining the social web ch1HyeonSeok Choi
 

Viewers also liked (20)

Code 11 논리 게이트
Code 11 논리 게이트Code 11 논리 게이트
Code 11 논리 게이트
 
Domain driven design ch9
Domain driven design ch9Domain driven design ch9
Domain driven design ch9
 
MiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.MicroformatMiningTheSocialWeb.Ch2.Microformat
MiningTheSocialWeb.Ch2.Microformat
 
서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3서버인프라를지탱하는기술3_2_3
서버인프라를지탱하는기술3_2_3
 
C++ api design 품질
C++ api design 품질C++ api design 품질
C++ api design 품질
 
Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화Refactoring 메소드 호출의 단순화
Refactoring 메소드 호출의 단순화
 
자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9자바 병렬 프로그래밍 ch9
자바 병렬 프로그래밍 ch9
 
Code1_2
Code1_2Code1_2
Code1_2
 
CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다CODE Ch.21 버스에 올라 탑시다
CODE Ch.21 버스에 올라 탑시다
 
Mining the social web 6
Mining the social web 6Mining the social web 6
Mining the social web 6
 
SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템SICP_2.5 일반화된 연산시스템
SICP_2.5 일반화된 연산시스템
 
프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14프로그래머로 사는 법 Ch14
프로그래머로 사는 법 Ch14
 
자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2자바 병렬 프로그래밍 1&2
자바 병렬 프로그래밍 1&2
 
컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5컴퓨터 프로그램 구조와 해석 3.5
컴퓨터 프로그램 구조와 해석 3.5
 
실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7실무로 배우는 시스템 성능 최적화 Ch7
실무로 배우는 시스템 성능 최적화 Ch7
 
HTTPS
HTTPSHTTPS
HTTPS
 
실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6
 
서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2서버인프라를지탱하는기술2_1-2
서버인프라를지탱하는기술2_1-2
 
HTTP 완벽가이드 16장
HTTP 완벽가이드 16장HTTP 완벽가이드 16장
HTTP 완벽가이드 16장
 
Mining the social web ch1
Mining the social web ch1Mining the social web ch1
Mining the social web ch1
 

Similar to Domain driven design ch1

Uncharted3 effect technique
Uncharted3 effect techniqueUncharted3 effect technique
Uncharted3 effect techniqueMinGeun Park
 
Life & Work of Butler Lampson | Turing100@Persistent
Life & Work of Butler Lampson | Turing100@PersistentLife & Work of Butler Lampson | Turing100@Persistent
Life & Work of Butler Lampson | Turing100@PersistentPersistent Systems Ltd.
 
Gpu Programming With GPUImage and Metal
Gpu Programming With GPUImage and MetalGpu Programming With GPUImage and Metal
Gpu Programming With GPUImage and MetalJanie Clayton
 
GPU Programming 360iDev
GPU Programming 360iDevGPU Programming 360iDev
GPU Programming 360iDevJanie Clayton
 
Keras: A versatile modeling layer for deep learning
Keras: A versatile modeling layer for deep learningKeras: A versatile modeling layer for deep learning
Keras: A versatile modeling layer for deep learningDr. Ananth Krishnamoorthy
 
Open Source Big Graph Analytics on Neo4j with Apache Spark
Open Source Big Graph Analytics on Neo4j with Apache SparkOpen Source Big Graph Analytics on Neo4j with Apache Spark
Open Source Big Graph Analytics on Neo4j with Apache SparkKenny Bastani
 
Deeplearning on Hadoop @OSCON 2014
Deeplearning on Hadoop @OSCON 2014Deeplearning on Hadoop @OSCON 2014
Deeplearning on Hadoop @OSCON 2014Adam Gibson
 
Tensorflow on Android
Tensorflow on AndroidTensorflow on Android
Tensorflow on AndroidKoan-Sin Tan
 
Testing for the deeplearning folks
Testing for the deeplearning folksTesting for the deeplearning folks
Testing for the deeplearning folksVishwas N
 
Multi-threaded web crawler in Ruby
Multi-threaded web crawler in RubyMulti-threaded web crawler in Ruby
Multi-threaded web crawler in RubyPolcode
 
Predicting Space Weather with Docker
Predicting Space Weather with DockerPredicting Space Weather with Docker
Predicting Space Weather with DockerDocker, Inc.
 
GPU Programming: CocoaConf Atlanta
GPU Programming: CocoaConf AtlantaGPU Programming: CocoaConf Atlanta
GPU Programming: CocoaConf AtlantaJanie Clayton
 
Architecting Solutions for the Manycore Future
Architecting Solutions for the Manycore FutureArchitecting Solutions for the Manycore Future
Architecting Solutions for the Manycore FutureTalbott Crowell
 
Chapter12 python object oriented concepts.ppt
Chapter12 python object oriented concepts.pptChapter12 python object oriented concepts.ppt
Chapter12 python object oriented concepts.pptnaveenkumarkiot12
 

Similar to Domain driven design ch1 (20)

Uncharted3 effect technique
Uncharted3 effect techniqueUncharted3 effect technique
Uncharted3 effect technique
 
Life & Work of Butler Lampson | Turing100@Persistent
Life & Work of Butler Lampson | Turing100@PersistentLife & Work of Butler Lampson | Turing100@Persistent
Life & Work of Butler Lampson | Turing100@Persistent
 
Debugging
DebuggingDebugging
Debugging
 
Os Lamothe
Os LamotheOs Lamothe
Os Lamothe
 
Gpu Programming With GPUImage and Metal
Gpu Programming With GPUImage and MetalGpu Programming With GPUImage and Metal
Gpu Programming With GPUImage and Metal
 
GPU Programming 360iDev
GPU Programming 360iDevGPU Programming 360iDev
GPU Programming 360iDev
 
Keras: A versatile modeling layer for deep learning
Keras: A versatile modeling layer for deep learningKeras: A versatile modeling layer for deep learning
Keras: A versatile modeling layer for deep learning
 
Workshop Mock-Ups
Workshop Mock-UpsWorkshop Mock-Ups
Workshop Mock-Ups
 
Open Source Big Graph Analytics on Neo4j with Apache Spark
Open Source Big Graph Analytics on Neo4j with Apache SparkOpen Source Big Graph Analytics on Neo4j with Apache Spark
Open Source Big Graph Analytics on Neo4j with Apache Spark
 
Deeplearning on Hadoop @OSCON 2014
Deeplearning on Hadoop @OSCON 2014Deeplearning on Hadoop @OSCON 2014
Deeplearning on Hadoop @OSCON 2014
 
Tensorflow on Android
Tensorflow on AndroidTensorflow on Android
Tensorflow on Android
 
Testing for the deeplearning folks
Testing for the deeplearning folksTesting for the deeplearning folks
Testing for the deeplearning folks
 
Distributed computation
Distributed computationDistributed computation
Distributed computation
 
speach
speachspeach
speach
 
Multi-threaded web crawler in Ruby
Multi-threaded web crawler in RubyMulti-threaded web crawler in Ruby
Multi-threaded web crawler in Ruby
 
Predicting Space Weather with Docker
Predicting Space Weather with DockerPredicting Space Weather with Docker
Predicting Space Weather with Docker
 
GPU Programming: CocoaConf Atlanta
GPU Programming: CocoaConf AtlantaGPU Programming: CocoaConf Atlanta
GPU Programming: CocoaConf Atlanta
 
Architecting Solutions for the Manycore Future
Architecting Solutions for the Manycore FutureArchitecting Solutions for the Manycore Future
Architecting Solutions for the Manycore Future
 
Nsby examples
Nsby examplesNsby examples
Nsby examples
 
Chapter12 python object oriented concepts.ppt
Chapter12 python object oriented concepts.pptChapter12 python object oriented concepts.ppt
Chapter12 python object oriented concepts.ppt
 

More from HyeonSeok Choi

밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05HyeonSeok Choi
 
밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2HyeonSeok Choi
 
프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2HyeonSeok Choi
 
알고리즘 중심의 머신러닝 가이드 Ch04
알고리즘 중심의 머신러닝 가이드 Ch04알고리즘 중심의 머신러닝 가이드 Ch04
알고리즘 중심의 머신러닝 가이드 Ch04HyeonSeok Choi
 
딥러닝 제대로시작하기 Ch04
딥러닝 제대로시작하기 Ch04딥러닝 제대로시작하기 Ch04
딥러닝 제대로시작하기 Ch04HyeonSeok Choi
 
밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05HyeonSeok Choi
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성HyeonSeok Choi
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장HyeonSeok Choi
 
실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8HyeonSeok Choi
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaHyeonSeok Choi
 
실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1HyeonSeok Choi
 
HTTP 완벽가이드 21장
HTTP 완벽가이드 21장HTTP 완벽가이드 21장
HTTP 완벽가이드 21장HyeonSeok Choi
 
HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.HyeonSeok Choi
 
HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.HyeonSeok Choi
 

More from HyeonSeok Choi (20)

밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05
 
밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2밑바닥부터시작하는딥러닝 Ch2
밑바닥부터시작하는딥러닝 Ch2
 
프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2
 
알고리즘 중심의 머신러닝 가이드 Ch04
알고리즘 중심의 머신러닝 가이드 Ch04알고리즘 중심의 머신러닝 가이드 Ch04
알고리즘 중심의 머신러닝 가이드 Ch04
 
딥러닝 제대로시작하기 Ch04
딥러닝 제대로시작하기 Ch04딥러닝 제대로시작하기 Ch04
딥러닝 제대로시작하기 Ch04
 
밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05밑바닥부터시작하는딥러닝 Ch05
밑바닥부터시작하는딥러닝 Ch05
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
 
7가지 동시성 모델 4장
7가지 동시성 모델 4장7가지 동시성 모델 4장
7가지 동시성 모델 4장
 
Bounded Context
Bounded ContextBounded Context
Bounded Context
 
DDD Repository
DDD RepositoryDDD Repository
DDD Repository
 
DDD Start Ch#3
DDD Start Ch#3DDD Start Ch#3
DDD Start Ch#3
 
실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, Kibana
 
실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1실무로배우는시스템성능최적화 Ch1
실무로배우는시스템성능최적화 Ch1
 
HTTP 완벽가이드 21장
HTTP 완벽가이드 21장HTTP 완벽가이드 21장
HTTP 완벽가이드 21장
 
HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.HTTP 완벽가이드 6장.
HTTP 완벽가이드 6장.
 
HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.HTTP 완벽가이드 1장.
HTTP 완벽가이드 1장.
 
Cluster - spark
Cluster - sparkCluster - spark
Cluster - spark
 
Pair RDD - Spark
Pair RDD - SparkPair RDD - Spark
Pair RDD - Spark
 

Recently uploaded

Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 

Recently uploaded (20)

Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 

Domain driven design ch1

  • 1. Domain-Driven Design chois79 12년 10월 8일 월요일
  • 2. DDD(Domain-Driven Design) • 가장 중요한 복잡성은 기술적인 것이 아닌 업무 도메인이다. • DDD의 목표: 복잡한 도메인을 다뤄야 하는 소프트웨어 프로젝트에 박차를 가하는 것 • 이 책의 전제 • 대부분의 소프트웨어 프로젝트에서는 가장 먼저 도메인과 도메인 로직에 집중해야 한다 • 복잡한 도메인 설계는 모델을 기반으로 해야한다 • DDD를 위한 선행 조건 • 개발은 반복적인 주기를 토대로 진행되어야 한다 • 개발자와 도메인 전문가는 밀접한 관계에 있어야 한다 12년 10월 8일 월요일
  • 3. 이 책의 구성 • 1부, 동작하는 도메인 만들기 • DDD의 배경 및 목표 제시 • 2부, 모델 주도 설계의 기본 • 모델과 실제 동작하는 소프트웨어 사이의 간극을 줄이는 법 • 3부, 더 심층적인 통찰력을 향한 리팩터링 • 반복적인 단계를 통한 모델의 정련 • 4부, 전략적 설계 • 복잡한 시스템, 더 큰 조직, 외부 시스템 및 기존 시스템과의 상호 작용 12년 10월 8일 월요일
  • 4. 1부 동작하는 도메인 모델 만들기 12년 10월 8일 월요일
  • 5. 개요(1/2) • 모델이란? • 대상을 단순화 한것 • 어떤 사실을 해석한 것 • 당면한 문제를 해결하는 것과 관련된 측면을 추상화 • 중요하지 않은 세부사항은 고려하지 않음 12년 10월 8일 월요일
  • 6. 개요(2/2) • 소프트웨어의 도메인 • 사용자가 프로그램을 사용하는 대상 영역 • 대게의 경우 컴퓨터와 관련이 없음 • 좋은 소프트웨어를 만들기 위해서는 도메인에 대한 폭 넓은 지식이 필요 • 도메인 지식은 복잡하고 양이 많음 • 모델 적용 필요 • 도메인 모델: 해당 지식을 엄격하게 구성하고, 선택적으로 추상화 한것 12년 10월 8일 월요일
  • 7. 소프트웨어의 본질 • 사용자를 위해 도메인에 관련된 문제를 해결하는 것 • 도메인 연구는 소프트웨어 프로젝트에서 최우선 과제로 여겨지지 않는다 • 개발자는 자신의 실력을 훈련할수 있는 정량적인 문제를 추구함 • 도메인 업무는 무질서하고 개발자로서의 능력에 보탬이 될것 같지 않은 복잡하고 새로운 지식을 많이 요구 • 재능이 있는 기술자는 정교한 프레임워크 개발을 통해 기술을 바탕으로 문제를 해결하려 함 • 도메인을 학습하고 모델링하는 일은 다른이들의 몫으로 남겨둔다 • But, 소프트웨어 중심에 있는 복잡성은 정면으로 돌파해야 함 • 그렇지 않을 경우, 도메인과 무관한 소프트웨어를 만들 수 있다. 12년 10월 8일 월요일
  • 8. 1부 에서는 • 모델은 지식의 정수만을 뽑아낸 것이다. - 1장 • 모델은 모든 팀 구성원이 사용하는 언어의 중추다 - 2장 • 모델과 핵심 설계는 서로 영향을 주며 구체화 된다 - 3장 12년 10월 8일 월요일
  • 9. Ch.1 지식 탐구 12년 10월 8일 월요일
  • 10. going to lead to the leap forward in productivity that they were looking for. We tried having the PCB designers tell me exactly what the software should do. Bad idea. They were great circuit designers, but their software ideas was a glimmer of hope in the reports they The first few meetings were discouraging, but there usually involved reading in an ASCII file, sorting it, writing it backalways involved "nets" and various and producing a A net, in this domain, clearly not asked for. They out with some annotation, details about them. report. This was is essentially a wire conductor that can connect any number of components on a PCB and carry an going to lead to thesignal to everything it is connected to. We had the first element offor. domain model. leap forward in productivity that they were looking the PCB 분석were discouraging, but there was a glimmer of hope in the reports they electrical The first few meetings 예제(1/5) asked for. They always involved "nets" and various details about them. A net, in this domain, is Figure 1.1. essentially a wire conductor that can connect any number of components on a PCB and carry an • electrical signal 모델의 첫번째it요소 도메인 to everything is connected to. We had the first element of the domain model. • 네트를 통해 컴포넌트를 연결하고, 전기 신호를 전달 Figure 1.1. I started drawing diagrams for them as we discussed the things they wanted the software to do. I used an informal variant of object interaction diagrams to walk through scenarios. Figure 1.2. I started drawing diagrams for them as we discussed the things they wanted the software to do. I used an informal variant of object interaction diagrams to walk through scenarios. Figure 1.2. 12년 10월 8일 월요일
  • 11. Expert 1: It isn't enough to say a signal arrives at a ref-des, we have to know the pin. Developer: Ref-des? Expert 2: Same thing as a component instance. Ref-des is what it's called in a particular tool we PCB 분석 예제(2/5) use. Expert 1: Anyhow, a net connects a particular pin of one instance to a particular pin of another. Developer: Are you saying that a pin belongs to only one component instance and connects to • 반복 커뮤니케이션 을 통한 정제 only one net? Expert 1: Yes, that's right. Expert 2: Also, every net has a topology, an arrangement that determines the way the elements • 컨포넌트 인스턴스로 이름을 변경 of the net connect. Developer: OK, how about this? • Pin과 Topology 추가 Figure 1.3. To focus our exploration, we limited ourselves, for a while, to studying one particular feature. A 12년 10월 8일 월요일
  • 12. "probe simulation" would trace the propagation of a signal to detect likely sites of certain kinds of problems in the design. Developer: I understand how the signal gets carried by the Net to all the Pins attached, but how does it go any further than that? Does the Topology have something to do with it? PCB 분석 예제(3/5) Expert 2: No. The component pushes the signal through. Developer: We certainly can't model the internal behavior of a chip. That's way too complicated. Expert 2: We don't have to. We can use a simplification. Just a list of pushes through the component from certain Pins to certain others. Developer: Something like this? • 한가지 시나리오를 고려한 집중 [With considerable trial-and-error, together we sketched out a scenario.] • “탐침 시뮬레이션” Figure 1.4. • 홈 로직 적용 Developer: But what exactly do you need to know from this computation? Expert 2: We'd be looking for long signal delays—say, any signal path that was more than two or three hops. It's a rule of thumb. If the path is too long, the signal may not arrive during the clock cycle. Developer: More than three hops.... So we need to calculate the path lengths. And what counts as a hop? Expert 2: Each time the signal goes over a Net, that's one hop. Developer: So we could pass the number of hops along, and a Net could increment it, like this. Figure 1.5. 12년 10월 8일 월요일
  • 13. PCB 분석 예제(4/5) Developer: The only part that isn't clear to me is where the "pushes" come from. Do we store that data for every Component Instance? Expert 2: The pushes would be the same for all the instances of a component. • 도메인 로직 분석 of component determines the pushes. They'll be the same for every Developer: So the type instance? • 신호 전달 Figure 1.6. Expert 2: I'm not sure exactly what some of this means, but I would imagine storing push- throughs for each component would look something like that. Developer: Sorry, I got a little too detailed there. I was just thinking it through. . . . So, now, where does the Topology come into it? 12년 10월 8일 월요일
  • 14. PCB 분석 예제(5/5) their understanding of how the model would play into the solution. A class diagram representing that early model looks something like this. • 모델을 바탕으로한 클래스 다이어 그램Figure 1.7. • 무엇을 한 것인가? more part-time days of this, I automated test framework. Iattempt some code. I After a couple wrote a very simple prototype, driven by an felt I understood enough to avoided all infrastructure. There was no persistence, and no user interface (UI). This allowed me to concentrate on the behavior. I was able to demonstrate a simple probe simulation in just a few more days. Although it used dummy data and wrote raw text to the console, it was nonetheless • PCB 엔지니어 -> 개발자: 도메인 설명 doing the actual computation of path lengths using Java objects. Those Java objects reflected a model shared by the domain experts and myself. The concreteness of this prototype made clearer to the domain experts what the model meant and how it related to the functioning software. From that point, our model discussions became more • 개발자 -> PCB 엔지니어: 객체의 상호 작용 방식에 관한 시나리오 설명 interactive, as they could see how I incorporated my newly acquired knowledge into the model and then into the software. And they had concrete feedback from the prototype to evaluate their own thoughts. Embedded in that model, which naturally became much more complicated than the one shown • PCB 엔지니어와 개발자가 함께 브레인 스토밍을 통해 모델을 정제 here, was knowledge about the domain of PCB relevant to the problems we were solving. It consolidated many synonyms and slight variations in descriptions. It excluded hundreds of facts that the engineers understood but that were not directly relevant, such as the actual digital features of the components. A software specialist like me could look at the diagrams and in minutes start to get a grip on what the software was about. He or she would have a framework to organize new information and learn faster, to make better guesses about what was important and what was not, and to communicate better with the PCB engineers. 12년 10월 8일 월요일
  • 15. 효과적인 모델링의 요소 • 모델과 구현의 연계 • 모델을 기반으로 하는 언어 정제 • 풍부한 지식이 담긴 모델 개발 • 모델의 정제 • 브레인 스토밍과 실험 12년 10월 8일 월요일
  • 16. 지식 탐구 • 복잡한 도메인으로 부터 추상화하여 특정 지식을 엄밀히 표현하는 모델을 만들어 나가는 활동 • 폭포수 개발 방식 • 지식이 한 방향으로 흘러갈뿐 축척되지 않는다. • 반복 프로세스를 활용한 방식 • 소프트웨어를 확장 가능한 상태로 유지 가능 • But, 프로그래머가 도메인에 관심이 없다면, 소프트웨어가 높은 수준에 이르기는 힘듬 • 지식 탐구는 혼자서 하는 활동이 아닌 개발자와 도메인 전문가가 함께 협업해야함 • 모델은 완벽해 질수 없으며, 다만 계속해서 발전해나갈 뿐이다. 12년 10월 8일 월요일
  • 17. 지속적인 학습 • 소프트웨어를 개발하기 시작할때 우리는 충분히 알지 못한 상태에서 시작한다 • 모든 프로젝트에서는 지식이 새기 마련이다. • 조직개편, 외주 제작 • 생산성이 뛰어난 팀은 지속적인 학습을 바탕으로 의식적으로 지식을 함양 • 핵심적인 부분을 개발하는데 초첨을 맞춘 고정 핵심 인력 양성을 통한 지식 축적 • 지식 탐구 프로세스 확립 필요 • 똑같이 지식을 얻고 의사소통 체계를 공유하며, 구현을 거쳐 피드백 고리를 완성하는 일을 모두 효과적으로 수행해야 함 12년 10월 8일 월요일
  • 18. Example [ Team LiB ] Extracting a Hidden Concept Knowledge-Rich Design Let's start 담긴 설계 (1/4) 풍부한 지식이 withvoyage of a ship. model that could be the basis of an application for a very simple domain The kind of knowledge captured in a model such as the PCB example goes beyond "find the nouns." Business activities and rules are as central to a domain as are the entities involved; any cargos onto a domain will have various categories of concepts. Knowledge crunching yields models that reflect this kind of insight. In parallel with model changes, developers refactor the implementation to express the model, giving the application use of that knowledge. It is with this move beyond entities and values that knowledge crunching can get intense, because there may be actual inconsistency among business rules. Domain experts are usually not aware of • 예제: 선박 화물 운송 예약 시스템 how complex their mental processes are as, in the course of their work, they navigate all these rules, reconcile contradictions, and fill in gaps with common sense. Software can't do this. It is through knowledge crunching in close collaboration with software experts that the rules are clarified, fleshed out, reconciled, or placed out of scope. Figure 1.8. Example • 간단한 도메인 Hidden Concept Extracting a 모델 Let's start with a very simple domain model that could be the basis of an application for booking cargos onto a voyage of a ship. • Cargo(화물), Voyage(운항) Figure 1.8. We can state that the booking application's responsibility is to associate each Cargo wi We can state that the booking application'sand tracking that Cargo with a Voyage, recording responsibility is to associate each relationship. So far so good. Somewhere in the ap Voyage, recording and tracking that relationship. So far so good. Somewhere in the application • 구현 코드 could be a method like this: a method like this: code there could be code there public int makeBooking(Cargo cargo, Voyage voyage) { int confirmation = orderConfirmationSequence.next(); public int makeBooking(Cargo cargo, Voyage voyage) { voyage.addCargo(cargo, confirmation); return confirmation; } int confirmation = orderConfirmationSequence.next(); voyage.addCargo(cargo, confirmation); Because there are always last-minute cancellations, standard practice in the shipping industry is to accept more cargo than a particular vessel can carry on a voyage. This is called "overbooking." Sometimesreturn confirmation; booking 110 percent of capacity. In a simple percentage of capacity is used, such as other cases complex rules are applied, favoring major customers or certain kinds of cargo. } Because there are always last-minute cancellations, standard practice in the shipping in 12년 10월 8일 월요일 accept more cargo than a particular vessel can carry on a voyage. This is called "overbo
  • 19. This is a basic strategy in the shipping domain that would be known to any businessperson in the shipping industry, but it might not be understood by all technical people on a software team. 풍부한 지식이 담긴 설계 (2/4) The requirements document contains this line: This is a basic strategy in the10% overbooking. Allow shipping domain that would be known to any businessperson in the shipping industry, but it might not be understood by all technical people on a software team. The class diagram and code The requirements document contains this line: now look like this: Allow 10% overbooking. • 비즈니스 요구사항code now look like this: The class diagram and 반영 Figure 1.9. • 10% 초과 예약 허용 Figure 1.9. • public int makeBooking(Cargo 구현 코드 cargo, Voyage voyage) { double maxBooking = voyage.capacity() * 1.1; if ((voyage.bookedCargoSize() + cargo.size()) > maxBooking)Voyage voyage) public int makeBooking(Cargo cargo, { return –1; double maxBooking = voyage.capacity() * 1.1; int confirmation = orderConfirmationSequence.next(); if ((voyage.bookedCargoSize() + cargo.size()) > voyage.addCargo(cargo, confirmation); maxBooking) return –1; return confirmation; } int confirmation = orderConfirmationSequence.next(); voyage.addCargo(cargo, confirmation); Now an important business rule is hidden as a guard clause in an application method. Later, in return confirmation; Chapter 4, we'll look at the principle of LAYERED ARCHITECTURE, which would guide us to move the over-booking}rule into a domain object, but for now let's concentrate on how we could make this knowledge more explicit and accessible to everyone on the project. This will bring us to a similar solution. • 문제점 Now an important business rule is hidden as a guard clause in an application method. Later, in 1. As written, it is unlikely that any business expert could read this code to verify the rule, even Chapter 4, we'll look at the principle of LAYERED ARCHITECTURE, which would guide us to move the with the guidance of a developer. over-booking rule into a domain object, but for now let's concentrate on how we could make this 2. •the 개발자의 도움이 있더라도and accessible to everyone 읽고 규칙을 검증하지 못함 us to a similar knowledge more explicit 업무전문가가 이 코드를 on the project. This will bring It would be difficult for a technical, non-businessperson to connect the requirement text with code. solution. If the rule were more complex, that much more would be at stake. We can change the design to better capture this knowledge. The overbooking rule is a policy. • 기술적인 측면만 담당하는 사람은 코드와 요구사항을 결부시키기가 어려울 것 Policy is another name for the designit is unlikely that any business expert is 1. As written, pattern known as STRATEGY (Gamma et al. 1995). It could read this code to verify the rule, even usually motivated bywith the guidance of a developer. not needed here, as far as we the need to substitute different rules, which is know. But the concept we are trying to capture does fit the meaning of a policy, which is an equally important motivation in domain-driven design. (See Chapter 12, "Relating Design Patterns to the Model.") 2. It would be difficult for a technical, non-businessperson to connect the requirement text with the code. 12년 10월 8일 월요일 If the rule were moreFigure 1.10. that much more would be at stake. complex,
  • 20. 풍부한 지식이 담긴 설계 (3/4) • Strategy Pattern 적용 The code is now: public int makeBooking(Cargo cargo, Voyage voyage) { The code is now: • 코드 if (!overbookingPolicy.isAllowed(cargo, voyage)) return –1; The code is now: int confirmation = orderConfirmationSequence.next(); public int makeBooking(Cargo cargo, Voyage voyage) { public int makeBooking(Cargo confirmation); voyage.addCargo(cargo, cargo, Voyage voyage) { if (!overbookingPolicy.isAllowed(cargo, voyage)) return –1; int confirmation = orderConfirmationSequence.next(); if (!overbookingPolicy.isAllowed(cargo, voyage)) return –1; return confirmation; voyage.addCargo(cargo, confirmation); int confirmation = orderConfirmationSequence.next(); return confirmation; }} voyage.addCargo(cargo, confirmation); return confirmation; The new Overbooking Policy class contains this method: } The new Overbooking Policy class contains this method: public boolean isAllowed(Cargo cargo, Voyage voyage) { return (cargo.size() + voyage.bookedCargoSize()) <= • 초과 예약 정책} (voyage.capacity() * 1.1); The new Overbooking Policy class contains this method: public boolean isAllowed(Cargo cargo, that rule is It will be clear to all that overbooking is a distinct policy, and the implementation of Voyage voyage) { explicit and separate. (cargo.size() + voyage.bookedCargoSize()) <= return public boolean that such an elaborate design be cargo, Voyage voyage) { isAllowed(Cargo applied to (voyage.capacity() focus on the every detail of minimize Now, I am not recommending domain. Chapter 15, (cargo.size() + voyage.bookedCargoSize()) <= * 1.1); the return "Distillation," goes into depth on how to important and }or separate everythingcan be This example is and share show that a domain model anddesign has corresponding design else. meant to (voyage.capacity()knowledge. The more explicit used to secure * 1.1); these advantages: } It 1. In order toclear design tonature of overbooking as a distincteveryonedistinct will will be bring the to the this stage,overbooking and important businesspolicy, and the implementation of that rule is have come to understand all that the programmers and is a else involved 12년 10월 8일 월요일 explicit and separate. overbooking is a distinct policy, and the implementation of that rule is It will not just an obscure all that rule, be clear to calculation.
  • 21. 풍부한 지식이 담긴 설계 (4/4) • 적용 결과 • 초과 예약 정책이 별개의 정책이라는 사실을 모두가 알수 있음 • 정책 구현이 명시적으로 드러나고 다른 구현가 분리 됨 • 저자의 의견 • 도메인의 모든 세부 사항에 이러한 정교한 설계를 적용하라는 것은 아니다 • 명시적인 설계의 이점 • 프로그래머와 그 밖의 모든 이가 중요한 업무 규칙임을 알게 되었음 • 프로그래머는 업무 전문가에게 그들이 이해할 수 있는 수준으로 기술적 산출물, 심지어 코드까지 보여 줄수 있 으며 이를 통해 피드백 고리가 완성됨 12년 10월 8일 월요일
  • 22. 심층 모델 • 유용한 모델은 겉으로 드러나 있는 경우가 거의 없다. • 도메인과 애플리케이션 요구사항을 이해하게 되면 처음에 생각했던 모델 요소를 버리 거나 관점을 바꾸게 됨 • 이를 통해 문제의 핵심을 관통하는 포착하기 힘든 추상화가 서서히 나타남 • 지식 탐구는 탐험과도 같아서 어디서 끝나게 될지 알지 못한다. 12년 10월 8일 월요일
  • 23. 요약 • 소프트웨어의 복잡도는 도메인의 복잡도에서 비롯된다 • 수준 높은 소프트웨어 개발을 위해서는 • 도메인 전문가, 설계자, 개발자 모두가 도메인 지식을 갖추고 지속적으로 커뮤니케이션을 해야 한다. • 이의 결과물인 도메인 모델은 분석, 설계, 개발 관점의 모든 사항을 반영할 수 있도록 지속적으로 발 전되어야 한다. • 개발자 관점 • 도메인에 대한 지식을 갖추도록 해야 함 • 도메인과 관련된 지식을 코드에 최대한 반영해야 함 12년 10월 8일 월요일