Movatterモバイル変換


[0]ホーム

URL:


増田 亨, profile picture
Uploaded by増田 亨
PDF, PPTX16,609 views

ドメイン駆動設計という仕事の流儀

Devlove2012 カンファレンス 発表資料。 ドメイン駆動設計。アプリケーションアーキテクチャ、開発プロセス、設計スタイル。腕を磨く。

Download as PDF, PPTX
DevLOVE 2012 ドメイン駆動設計という    仕事の流儀        2012年12月16日     有限会社 システム設計 増田亨
Domain-Driven Design (DDD) ドメイン駆動設計
ドメイン駆動設計の  腕を磨くと
仕事が楽しくなる  喜んでもらえる  自分の成長の手ごたえ  やっていて面白い
ドメイン駆動設計        興味を持つ利用者のやりたい事         いつも   話題にする        モデルに要約する コードで実現する
ドメイン駆動設計的な・アーキテクチャ・開発プロセス・設計スタイル
Domain-Drivenな  アプリケーション  アーキテクチャ
ドメインモデル指向の設計パターン業務活動のトリガー                   業務手順の要約                             業務の知識     ドメイン                     起動                                 ドメイン                  委譲                                                                ドメイン     イベント                        サービス                           モデル   入会申込                         受付()    -申込番号                      {                               会員とは?    -氏名                          検証();                         入会とは?    -連絡先                         記録();                         申込とは?    -申込日時                        通知();                         受付とは?                               }"something interesting      "represents a Use Case scenario"   “an Object Modelwhich affects the domain"   "delegate to other objects "       of the Domain”[EAA-dev, Fowler]           [GRASP : Controller]               [PoEAA]
ドメイン層の基本部品業務イベント入会申込                                                  会員リポジトリ           会員登録サービス                                     << interface >>イベント            << controller >>リスナ      登録する(会員) : void                                               登録する(会員) : void                                               存在を確認(会員) : Boolean                                                  DIP    DBアクセス       会員                            会員トランスファー                                            << interface>>  <<domain object>>連絡手段                               Thank Youメール送る(会員) : void                                   関係部門に通知する(会員) :void通知先() : メールアドレス業務の用語、業務のルール                              メール送信            DIP      メッセージング
アンチパターン 大きなサービスクラス        get 5以上のimport文       get                   get    データの入れ物だけの 5以上のインスタンス変数       set                           ドメインオブジェクト 10行以上の長いメソッド       set                    set 50行を超えるクラス               メソッドは                          getter/setter だけドメインサービスクラスが    業務の流れ・構造・ルールのいろいろ知っていて、      理解が不十分なまま作った、                とりあえずの置き場所に、なんでもやりたがる       なんでも突っ込んでいく                (偶発的凝集)。
ドメインモデル指向の  フレームワーク  Spring MVC           SQLマッピング                         myBatisBean バリデータ     ドメイン      メッセージング                          Spring JMS  Hibernate               モデル テンプレート                         OXマッピング  エンジン                           JAXB  Velocity     業務の知識
ドメインイベント駆動の実行環境     ドメイン              ドメイン            ドメイン     イベント              イベント            イベント HTTP リクエスト          メッセージング(Web アプリ, Web API)   (システム間連携)         電子メール受信  アプケーション             メッセージング          メールサーバー   サーバー                 サーバー             James    Tomcat             Active MQ                             サービス      Mailet           Servlet                             コンテナ      コンテナ           コンテナ                            Mule ESB                     ドメインサービス                      ドメインモデル
Domain-Drivenな  開発プロセス
ドメイン駆動の開発プロセス   ドメインの把握           ユースケース   画面・帳表  コンテキスト    業務フロー                         ロバストネス分析                      イベント    状態遷移                                                   必要ならシーケンス図初期のラフモデル   モデルの改良             属性の追加    操作追加         基盤クラス追加                    モデルの洗練                                                         Java                                                       ソースコー                                                          ド                                         DDL/SQL 手がかかり     要約、骨格    構造化用語集              ソースコー                                           ド ドメインモデルの設計と実装                データモデル
ドメインを把握するリレーションシップ駆動要件定義(RDRA)         ICONIX    初期のラフモデルを                             2時間以内で描く     ・コンテキストモデル     ・業務フローモデル              ・ドメインオブジェクトの発見     ・イベント/状態モデル            ・ドメインモデルの育て方                            ・ロバストネス分析     モデル間を関連づけ                ユースケースと     整合性と網羅性を確保               実装のギャップを埋める               ビジネスルールの発見と定義                       業務フロー図から                       ドメインモデルから                       イベント/状態モデルから                        それぞれのモデルから                        ビジネスルールを抽出する                        ヒントとテクニック
インクリメンタルに• Evolving ドメインモデルを育て続ける – 小さく生む – フィードバックを反映しながら育てる• Pervading ドメインモデルを行渡らせ続ける – 多くの関係者 – あらゆるタスク – ドメイン以外のレイヤ• Binding       ドメインモデルを   結びつけ続ける – 利用者の関心事とモデル – 実装コードとモデル
イテレーティブで発見的により良い部品を探し続ける モデリング プログラミング  リファクタリング     三位一体               繰り返し
ドメインモデルの  設計スタイル
設計原則 二本柱 ギュッと             サラッと 集めて              つなぐ  High Cohesion   Low Couplingドメインオブジェクトに適用する
業務の知識をギュッと集める・パッケージ・クラス・メソッド          High Cohesion
業務の概念ごとに 独立させてサラッとつなぐ・パッケージ・クラス           Low Coupling
ドメインモデルの設計    腕を磨く   小さな部品  How より What   設計の本を読む原則・パターンとの付き合い方
ドメイン駆動設計への道                  実装のテクニック                          ドメインの理解                   ・メソッドの構成         設計のスタイル                   ・オブジェクト間の特性の移動                   言葉の力小さく作る練習            ・データの再編成                   ・条件記述の単純化                                                    モデル駆動オブジェクト指向 エクササイズ                        ・役割ステレオタイプ9つの簡単なルール          ・メソッド呼び出しの単純化                                       ・小数の隣人と協力                                       RDD                                        責任の割当の原則                                        GRASP                                                    For                                                    Thoughtful Developer       実装の原則                             凝集と結合の原則                                                    Leading Designer                                         SOLID      ・クラス                                         RCC      ・振る舞いとメソッド                                         ASS      ・状態とコレクション
腕を磨く小さな部品
部品(業務の基本用語)の粒度日付 (時分秒を持たない)            金額            管理番号,登録番号時分(秒を持たない)               単価            取引先コード翌営業日, 休前日                数量,数量単位,換算    取引区分月末,月初, 四半期, 半期, 年度       消費税,税率,端数処理   契約番号期間                       合計,小計,総合計     商品番号有効期限                     数量割引          型式コード予定日                      キャンペーン価格      製造番号期限切れ一週間前のアラート            季節料金          シリアルナンバー前日のリマインダ                 キャンセルポリシー     ……                        …Date, String, BigDecimal, Long, …            小さな部品にプリミティブな型をラッピングした業務で必要なデータとロジック(知識、ルール)を凝集(カプセル化)する
ドメインオブジェクト第5章オブジェクト指向エクササイズ           小さく作る           クラス     50行まで           メソッド    3行まで           パッケージ   10ファイルまで
3行メソッドnextStage(){   ready();   set();   go();}       こういうのが良い感じ
必然的に   オブジェクト指向(小さく)   になる   9つの簡単なルール          「Thought Works アンソロジー」            第5章 オブジェクト指向エクササイズ原文 http://www.bennadel.com/resources/uploads/2012/ObjectCalisthenics.pdf
小さく作る練習課題1.ひとつのメソッドのインデントは1段階まで2.else 句 を使わない3.すべてのプリミティブ、文字型をラッピング4.ファーストクラスコレクションを使う5.1行につき、ドットはひとつ6.名前は省略しない7.クラス50行、パッケージ10ファイルまで8.インスタンス変数は2つまで9.getter/setter を使わない
小さく作る練習ガイド                                  パターン集第5章オブジェクト指向エクササイズ                     パターン集9つのルールslideshare:オブジェクト指向できていますか?http://www.slideshare.net/MoriharuOhzu/ss-14083300オブジェクト指向エクササイズのススメhttp://www.slideshare.net/yojik/ss-1033616オブジェクト指向の設計と実装 学び方のコツhttp://www.slideshare.net/masuda220/ss-14263541                              原文    http://www.bennadel.com/resources/uploads/2012/ObjectCalisthenics.pdf
小さな部品   実践の小技汎用部品 より 目的特化部品  if 文を減らす・隠す for 文を減らす・隠す setter を使わない getter を使わない
汎用部品       より   目的特化部品String             AreaCodeLong               EntryNumberBigDecimal ラッピング                   AmountDate               ExpireDateList<Appoint>      Appointments なんでも屋               目的特化
if   文を減らす・隠すBoolean より EnumStrategy/State パターンMissing Object パターン (null object パターン)Mapパターンマッチング…
for     文を減らす・隠す・ファーストクラスコレクションに隠す・Collection フレームワーク API の復習        たとえば、TreeMap, TreeSet必要なら・Comparable の実装・Comparator の実装・equals()/hashCode() の override
setter   を使わない完全コンストラクタ  ・Value Object パターン  ・生成時に必要な値をすべて渡す状態を変えたい時  ・別のオブジェクトを作る  ・ライフサイクルの短いクラスの導入  (状態を固定できるまで細分化)
getter     を使わない@Deprecated   フレームワークは使っていいよ   アプリケーションでは使っちゃだめよget して何したいのか?もう一度考え直す ロジックを移動する (データにロジックを寄せる) フィールドを移動する (ロジックにデータを寄せる)
腕を磨くHow   より   What
How       より    What業務要件:期限切れの前日にアラートメールを送る   expireDate.add(-1);   expireDate.previousDay();   expireDate.dayOfFinalAlert ();
How           より   What                       料金の用語( What ) をクラスで表現計算方法( How ) を記述                課金ポリシー                               適用する()      料金                               シーズン料金    計算する()                                           <<interface>>                               レート()  ルール変更・追加のたびに  クラスが肥大化し                        夏料金              冬料金  if 文が増殖する予感                       レート()            レート()                          ルール変更・追加は、                          一部の部品の追加、差し替えで                          すみそう。
腕を磨く  本を読む設計の
いろいろな設計の考え方に触れる             広がりと掘り下げのT字             多くの本に目を向け、視野を広げる。             (浅くて良い。建築や機械、他分野まで広げる。)             これぞと思う本は、徹底的に読み込んで深く理解する。             両方やることがたいせつ。© 慶応大学 SFC 井庭研 学習パターン
技術書を読み込む                    鳥の眼と虫の眼                    俯瞰して全体を見る。                    詳細に部分を見る。                    2つの視点を行き来する。       小説じゃないだから、       最初から順番に読んで面白いわけがない。       知らないことが書いてあるんだから、       一読で、わかるわけがない。       鳥の眼と虫の眼で何度も読み直す© 慶応大学 SFC 井庭研 学習パターン
設計技術を自分のものにする                  プロトタイピング                  実際に作って覚える。                  設計用語は、コードを書いて、動かして                  「はじめて」わかることばかり。               設計用語をひとつ覚えるたびに、               昨日のコードと今日のコードの違いが               自分でわかるようになる。               それが「設計の考え方」「見方」の変化。© 慶応大学 SFC 井庭研 学習パターン
腕を磨く  設計原則デザインパターン 付き合い方
DDDのパターンの源流  RDD: Responsibility Driven Design  18の基本用語(第1章)  GRASP: General Responsibility Assignment  9つの責任割り当て汎用パターン  SOLID: 5つのクラス設計の原則  RCC:3つのパッケージの凝集度の原則  ASS:3つのパッケージの結合度の原則
設計原則・デザインパターン   との付き合い方      北極星、 in the context、     as a whole
設計原則を北極星として使う北極星に行きたいわけではない。現在の進行方向の確認に使うだけ。南に進むことが、時には役に立つこともある。
in the context設計原則やデザインパターンは、特定の文脈(背景、事情、前後関係)の中での使い方を探す。文脈が違えば原則・パターンの使いどころも変わる。その文脈でのベストプラクティスを探す。
as a wholeドメインモデルが、全体として、  役に立つか?  心地よいか?設計原則やパターンへの執着が、ドメインモデルを台無しにすることもある。
まとめ
ドメイン駆動設計        興味を持つ利用者のやりたい事         いつも   話題にする        モデルに要約する コードで実現する
腕を磨く  小さな部品 How より What  設計の本を読む設計原則とうまく付き合う
仕事を楽しく 喜んでもらう 自分が成長する 面白いことをやる

Recommended

PDF
ドメイン駆動設計のためのオブジェクト指向入門
PDF
ドメインオブジェクトの設計ガイドライン
PDF
ドメイン駆動設計 基本を理解する
PDF
ドメインオブジェクトの見つけ方・作り方・育て方
PDF
ドメイン駆動設計 の 実践 Part3 DDD
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
PDF
ドメイン駆動設計のための Spring の上手な使い方
PDF
正しいものを正しく作る塾-設計コース
PPTX
世界一わかりやすいClean Architecture
PDF
ドメイン駆動設計 本格入門
PDF
ドメイン駆動設計サンプルコードの徹底解説
PDF
ドメイン駆動設計に15年取り組んでわかったこと
PDF
ドメイン駆動で開発する ラフスケッチから実装まで
PDF
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
PDF
世界でいちばんわかりやすいドメイン駆動設計
PDF
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
PDF
ソフトウェア開発のやり方の改善
PDF
例外設計における大罪
PDF
ドメイン駆動設計の正しい歩き方
PDF
イミュータブルデータモデル(入門編)
PDF
3週連続DDDその1 ドメイン駆動設計の基本を理解する
PDF
オブジェクト指向の設計と実装の学び方のコツ
PDF
ちいさなオブジェクトでドメインモデルを組み立てる
PDF
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
 
PPT
ドメインロジックの実装方法とドメイン駆動設計
PDF
ドメイン駆動設計(DDD)の実践Part2
PDF
オブジェクト指向エクササイズのススメ
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
PDF
DDD 20121106 SEA Forum November
PDF
リッチなドメインモデル 名前探し

More Related Content

PDF
ドメイン駆動設計のためのオブジェクト指向入門
PDF
ドメインオブジェクトの設計ガイドライン
PDF
ドメイン駆動設計 基本を理解する
PDF
ドメインオブジェクトの見つけ方・作り方・育て方
PDF
ドメイン駆動設計 の 実践 Part3 DDD
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
PDF
ドメイン駆動設計のための Spring の上手な使い方
PDF
正しいものを正しく作る塾-設計コース
ドメイン駆動設計のためのオブジェクト指向入門
ドメインオブジェクトの設計ガイドライン
ドメイン駆動設計 基本を理解する
ドメインオブジェクトの見つけ方・作り方・育て方
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計のための Spring の上手な使い方
正しいものを正しく作る塾-設計コース

What's hot

PPTX
世界一わかりやすいClean Architecture
PDF
ドメイン駆動設計 本格入門
PDF
ドメイン駆動設計サンプルコードの徹底解説
PDF
ドメイン駆動設計に15年取り組んでわかったこと
PDF
ドメイン駆動で開発する ラフスケッチから実装まで
PDF
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
PDF
世界でいちばんわかりやすいドメイン駆動設計
PDF
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
PDF
ソフトウェア開発のやり方の改善
PDF
例外設計における大罪
PDF
ドメイン駆動設計の正しい歩き方
PDF
イミュータブルデータモデル(入門編)
PDF
3週連続DDDその1 ドメイン駆動設計の基本を理解する
PDF
オブジェクト指向の設計と実装の学び方のコツ
PDF
ちいさなオブジェクトでドメインモデルを組み立てる
PDF
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
 
PPT
ドメインロジックの実装方法とドメイン駆動設計
PDF
ドメイン駆動設計(DDD)の実践Part2
PDF
オブジェクト指向エクササイズのススメ
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
世界一わかりやすいClean Architecture
ドメイン駆動設計 本格入門
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
世界でいちばんわかりやすいドメイン駆動設計
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ソフトウェア開発のやり方の改善
例外設計における大罪
ドメイン駆動設計の正しい歩き方
イミュータブルデータモデル(入門編)
3週連続DDDその1 ドメイン駆動設計の基本を理解する
オブジェクト指向の設計と実装の学び方のコツ
ちいさなオブジェクトでドメインモデルを組み立てる
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
 
ドメインロジックの実装方法とドメイン駆動設計
ドメイン駆動設計(DDD)の実践Part2
オブジェクト指向エクササイズのススメ
コンテナの作り方「Dockerは裏方で何をしているのか?」

Similar to ドメイン駆動設計という仕事の流儀

PDF
DDD 20121106 SEA Forum November
PDF
リッチなドメインモデル 名前探し
PDF
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
PDF
DSL駆動によるクラウド・アプリケーション開発
PDF
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
PDF
ドメイン駆動設計入門
PDF
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
PDF
作業分野 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第10回】
PDF
クラウド・モデリング
PDF
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
PDF
Amazon Web Servicesブース:UI×API×AWS 横田 聡
PDF
Agile 459 | 11/17 資料
PDF
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
PDF
Using Mind Maping And UML Effectively in Software Development
PDF
ソフトウェア開発の現場風景
PDF
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
PDF
【19-B-5】出張!DDD難民救済キャンプ
PDF
Intalio japan special cloud workshop
PDF
ドメイン駆動設計という設計スタイル
PDF
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
DDD 20121106 SEA Forum November
リッチなドメインモデル 名前探し
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
DSL駆動によるクラウド・アプリケーション開発
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
ドメイン駆動設計入門
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
作業分野 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第10回】
クラウド・モデリング
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
Amazon Web Servicesブース:UI×API×AWS 横田 聡
Agile 459 | 11/17 資料
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
Using Mind Maping And UML Effectively in Software Development
ソフトウェア開発の現場風景
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
【19-B-5】出張!DDD難民救済キャンプ
Intalio japan special cloud workshop
ドメイン駆動設計という設計スタイル
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】

More from 増田 亨

PDF
事業活動モデル・システム機能モデル・ビジネスロジックの記述
PDF
オブジェクト指向プログラミングの現在・過去・未来
PDF
ドメイン駆動設計 コアドメインを語り合ってみよう
PDF
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
PDF
プロダクトづくりのためのソフトウェア設計スタイル
PDF
ソフトウェア設計の学び方を考える
PDF
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
PDF
マイクロサービス 4つの分割アプローチ
PDF
ビジネスルールの複雑さに立ち向かう
PDF
ソフトウェアの核心にある複雑さに立ち向かう
PDF
DDD sample code explained in Java
PDF
アジャイルなソフトウェア設計を目指して
PDF
ドメイン駆動設計をゲーム開発に活かす
PDF
SoR 2.0 summary
PDF
毎日が越境だ!
PDF
SoR 2.0 基幹システムの再定義と再構築
PDF
ドメイン駆動設計とは何か 【入門編】
PDF
越境する情シス:進化可能なアーキテクチャを手に入れる
PDF
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
PDF
現場で役立つシステム設計の原則
事業活動モデル・システム機能モデル・ビジネスロジックの記述
オブジェクト指向プログラミングの現在・過去・未来
ドメイン駆動設計 コアドメインを語り合ってみよう
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
プロダクトづくりのためのソフトウェア設計スタイル
ソフトウェア設計の学び方を考える
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
マイクロサービス 4つの分割アプローチ
ビジネスルールの複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
DDD sample code explained in Java
アジャイルなソフトウェア設計を目指して
ドメイン駆動設計をゲーム開発に活かす
SoR 2.0 summary
毎日が越境だ!
SoR 2.0 基幹システムの再定義と再構築
ドメイン駆動設計とは何か 【入門編】
越境する情シス:進化可能なアーキテクチャを手に入れる
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
現場で役立つシステム設計の原則

ドメイン駆動設計という仕事の流儀


[8]ページ先頭

©2009-2025 Movatter.jp