SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
java-ja DDD




ざっくりDDD入門!!
    グロースエクスパートナーズ(株)
               和智 右桂
JavaEE勉強会 所属             Yukei Wachi


 グロースエクスパートナーズ株式会社 勤務


      和智 右桂
 ネコ好き
               IT アーキテクト
                           @digitalsoul0124
 Digital Romanticism
         http://d.hatena.ne.jp/digitalsoul
                               Photo by @digitalsoul0124 All rights reserved.
アジェンダ

•
導入
•DDD的アプリの構造
•モデル駆動設計

                         スライド中で使用されている画像について、
      その著作権の全部または一部は、 クレジットに示した著者によって保留されています。

                         Photo by @digitalsoul0124 All rights reserved.
導入
ソフトウェアは複雑だ...
複雑なのは、
ドメインそのもの、
  すなわち、
 ユーザの活動や
ビジネスなのである。
      ドメイン駆動設計 p.xiv
今までに開発したシステムに
ついて、
ドメインを
どれだけ理解して
いましたか?

         3D Character and Question Mark http://www.flickr.com/photos/crystaljingsr/3914729343/ by 姒儿喵喵
業務知識とは?
    キーパーソン




             現場の手際



  経済の知識
業務知識とは?

    データの構造



    演算       ルール

         システム間連携
業務知識を反映させることで、
   ソフトウェアは
  柔軟に変更したり
拡張したりできるようになる
DDD的ソフトウェアの
     構造
業務知識を反映した
 ソフトウェアの
  構造とは?
その前に
それほど
          しない
業務知識を反映した
 ソフトウェアの
  構造とは?
いわゆる
トランザクションスクリプト




           手続きにまで分解
       Ancient Tamil Script http://www.flickr.com/photos/symphoney/76513801/ by Idol
処理の種類に応じたモジュール化
                                                                          入力チェック
                                                                          <script
                                                                           var a=
                                                                           var xl
                                                                           if(xls




                                                                           DBアクセス
              A Very Nice Window Indeed




                                                                                    パラメタ
                             Search           Search



 SIDEBAR
                                              Pop-Up Menu


                                                   Small Pop-Up




                                                                                            SQLテンプレート
           Stuff                               Combo Box
                                  Bits

           Things                 Bobs              Small Combo




           Odds                   Odds

           Ends                   Ends                   Help
                                                         Tag
                                      Label            Explanotext




                                                                                                         データベース
                                          Cancel                     OK




                                                                                    結果セット
           UI                                                                                  <script
                                                                                                var a=
                                                                                                var xl
                                                                                                if(xls




                                                                                               SQL


                                                                          編集ロジック
                                                                          <script
                                                                           var a=
                                                                           var xl
                                                                           if(xls




処理内容に関わらず構造は安定
ただし...
  貨物予約ドメイン

               10 %のオーバーブッキングを認める
   仕様書


                     航海                   貨物


  データモデル
               積載量
                                *   サイズ




               // 貨物を追加する
    <script
     var a=
     var xl
     if(xls


               int 予約済み貨物量 = …
  ソースコード
               if(予約済み貨物量 + 貨物.サイズ > 航海.積載量 * 1.1){
                // 予約できない
                return … ;
               }




              重要なロジックが埋もれる
基本設計書に書いてある?




         ここらへん
あらためて


業務知識を反映した
 ソフトウェアの
  構造とは?
制約をコード内で可視化する
 貨物予約ドメイン

             10 %のオーバーブッキングを認める
  仕様書

                   航海                         貨物


 ドメインモデル
             積載量
                                    *   サイズ

                   {貨物のサイズの合計 < 航海の積載量 * 1.1}

                          オーバーブッキング
                            ポリシー



             // 貨物を追加する
   <script
    var a=
    var xl
    if(xls


             int 予約済み貨物量 = …
 ソースコード
             if(オーバーブッキングポリシー.allows(貨物, 航海)){
              // 予約できない
              return … ;
             }
ただし、バランスが重要




https://github.com/Mikkeren/FizzBuzzEnterpriseEdition/blob/master/src/main/java/com/seriouscompany/business/java/fizzbuzz/
                                                                    packagenamingpackage/impl/strategies/BuzzStrategy.java
正しい オブジェクト指向設計?
モデル駆動開発
複雑なドメインの設計は
     モデルを基にする
モデルとは
                                            専門家によって
                                               整理され
                                             単純化された
                                                              世界観

Astrolabe http://www.flickr.com/photos/kotomi-jewelry/4171052675/ by Kotomicreations (aka- kotomigd)
まずは、モデルを共有しよう!
  Microsoft Bing Maps' datacenter http://www.flickr.com/photos/scobleizer/4870003098/ by Robert Scoble
シナリオ




       モデル
ソフトウェアに




             モデルを反映させる
   escher wannabe b/w http://www.flickr.com/photos/midlander/54915243/ by you are your atman
続きは実践編へ!
One More !ing...
ところでモデルと言われて、
どんなものを
思い浮かべますか?




     3D Character and Question Mark http://www.flickr.com/photos/crystaljingsr/3914729343/ by 姒儿喵喵
作るべきは、業務のモデル




   シンプルなら、ほぼE-R図
続きは実践編へ!
ありがとうございました!
         Photo by @digitalsoul0124 All rights reserved.

Contenu connexe

Tendances

「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
Tadayoshi Sato
 

Tendances (20)

イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
 
PostgreSQLアンチパターン
PostgreSQLアンチパターンPostgreSQLアンチパターン
PostgreSQLアンチパターン
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
 
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)3週連続DDDその2  深いモデルの探求(ドメイン駆動設計 第3部)
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部)
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
 

Similaire à ざっくり DDD 入門!!

Object-Funcational Analysis and design
Object-Funcational Analysis and designObject-Funcational Analysis and design
Object-Funcational Analysis and design
Tomoharu ASAMI
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
Tomoharu ASAMI
 
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programmingオブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programming
Tomoharu ASAMI
 
AWS Elastic MapReduce詳細 -ほぼ週刊AWSマイスターシリーズ第10回-
AWS Elastic MapReduce詳細 -ほぼ週刊AWSマイスターシリーズ第10回-AWS Elastic MapReduce詳細 -ほぼ週刊AWSマイスターシリーズ第10回-
AWS Elastic MapReduce詳細 -ほぼ週刊AWSマイスターシリーズ第10回-
SORACOM, INC
 

Similaire à ざっくり DDD 入門!! (20)

Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
 
Object-Funcational Analysis and design
Object-Funcational Analysis and designObject-Funcational Analysis and design
Object-Funcational Analysis and design
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
 
20101018 JJUG CCC10 WindowsAzure
20101018 JJUG CCC10 WindowsAzure20101018 JJUG CCC10 WindowsAzure
20101018 JJUG CCC10 WindowsAzure
 
Tech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LTTech Fielders 2009/9/18 LT
Tech Fielders 2009/9/18 LT
 
BPStudy20121221
BPStudy20121221BPStudy20121221
BPStudy20121221
 
Groovyコンファレンス
GroovyコンファレンスGroovyコンファレンス
Groovyコンファレンス
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
 
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programmingオブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programming
 
HadoopとRDBMSをシームレスに連携させるSmart SQL Processing (Hadoop Conference Japan 2014)
HadoopとRDBMSをシームレスに連携させるSmart SQL Processing (Hadoop Conference Japan 2014)HadoopとRDBMSをシームレスに連携させるSmart SQL Processing (Hadoop Conference Japan 2014)
HadoopとRDBMSをシームレスに連携させるSmart SQL Processing (Hadoop Conference Japan 2014)
 
Cassandraのトランザクションサポート化 & web2pyによるcms用プラグイン開発
Cassandraのトランザクションサポート化 & web2pyによるcms用プラグイン開発Cassandraのトランザクションサポート化 & web2pyによるcms用プラグイン開発
Cassandraのトランザクションサポート化 & web2pyによるcms用プラグイン開発
 
Developers.IO 2019 Effective Datalake
Developers.IO 2019 Effective DatalakeDevelopers.IO 2019 Effective Datalake
Developers.IO 2019 Effective Datalake
 
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsFunctional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
 
Nginx
NginxNginx
Nginx
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
 
20111130 10 aws-meister-emr_long-public
20111130 10 aws-meister-emr_long-public20111130 10 aws-meister-emr_long-public
20111130 10 aws-meister-emr_long-public
 
レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】
 
Trait in scala
Trait in scalaTrait in scala
Trait in scala
 
AWS Elastic MapReduce詳細 -ほぼ週刊AWSマイスターシリーズ第10回-
AWS Elastic MapReduce詳細 -ほぼ週刊AWSマイスターシリーズ第10回-AWS Elastic MapReduce詳細 -ほぼ週刊AWSマイスターシリーズ第10回-
AWS Elastic MapReduce詳細 -ほぼ週刊AWSマイスターシリーズ第10回-
 

Plus de Yukei Wachi

エッセンシャルスクラムのエッセンス
エッセンシャルスクラムのエッセンスエッセンシャルスクラムのエッセンス
エッセンシャルスクラムのエッセンス
Yukei Wachi
 
Dddをもっと身近に
Dddをもっと身近にDddをもっと身近に
Dddをもっと身近に
Yukei Wachi
 
Future Center@Junkudo
Future Center@JunkudoFuture Center@Junkudo
Future Center@Junkudo
Yukei Wachi
 

Plus de Yukei Wachi (20)

エヴァンス本から今学べること
エヴァンス本から今学べることエヴァンス本から今学べること
エヴァンス本から今学べること
 
価値の源流に向かう旅
価値の源流に向かう旅価値の源流に向かう旅
価値の源流に向かう旅
 
スモールリーダーシップ読書会ワークショップ
スモールリーダーシップ読書会ワークショップスモールリーダーシップ読書会ワークショップ
スモールリーダーシップ読書会ワークショップ
 
「言葉の地図」でチームの議論をスムーズに
「言葉の地図」でチームの議論をスムーズに「言葉の地図」でチームの議論をスムーズに
「言葉の地図」でチームの議論をスムーズに
 
ドメイン駆動設計再入門
ドメイン駆動設計再入門ドメイン駆動設計再入門
ドメイン駆動設計再入門
 
ゆらぎのある決定
ゆらぎのある決定ゆらぎのある決定
ゆらぎのある決定
 
知識から反射へ
知識から反射へ知識から反射へ
知識から反射へ
 
エッセンシャルスクラムのエッセンス
エッセンシャルスクラムのエッセンスエッセンシャルスクラムのエッセンス
エッセンシャルスクラムのエッセンス
 
コードに語らせるために
コードに語らせるためにコードに語らせるために
コードに語らせるために
 
「攻めのIt」を実現するアーキテクチャーとdev opsの関係
「攻めのIt」を実現するアーキテクチャーとdev opsの関係「攻めのIt」を実現するアーキテクチャーとdev opsの関係
「攻めのIt」を実現するアーキテクチャーとdev opsの関係
 
人が作るソフトウェア 〜今組織パターンを読む意味〜
人が作るソフトウェア 〜今組織パターンを読む意味〜人が作るソフトウェア 〜今組織パターンを読む意味〜
人が作るソフトウェア 〜今組織パターンを読む意味〜
 
SGT技術トークス 継続的デリバリー
SGT技術トークス 継続的デリバリーSGT技術トークス 継続的デリバリー
SGT技術トークス 継続的デリバリー
 
世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということ世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということ
 
テスト駆動開発の進化
テスト駆動開発の進化テスト駆動開発の進化
テスト駆動開発の進化
 
教科書と現場のあいだ
教科書と現場のあいだ教科書と現場のあいだ
教科書と現場のあいだ
 
Dddをもっと身近に
Dddをもっと身近にDddをもっと身近に
Dddをもっと身近に
 
Future Center@Junkudo
Future Center@JunkudoFuture Center@Junkudo
Future Center@Junkudo
 
Growing Grails Software, Driven by Domain
Growing Grails Software, Driven by DomainGrowing Grails Software, Driven by Domain
Growing Grails Software, Driven by Domain
 
戦略的設計入門
戦略的設計入門戦略的設計入門
戦略的設計入門
 
Model on Grails
Model on GrailsModel on Grails
Model on Grails
 

ざっくり DDD 入門!!