Skip to main content More Related Content
PDF
KEY
PDF
PDF
ドメイン駆動設計のための Spring の上手な使い方 PDF
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8 PDF
PDF
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021 What's hot
PDF
PDF
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring PDF
PPT
PDF
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」 PDF
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは PDF
Python におけるドメイン駆動設計(戦術面)の勘どころ PDF
PDF
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル) PDF
PPTX
Viewers also liked
PDF
PDF
PDF
PDF
PDF
PDF
PDF
オブジェクト指向プログラミングのためのモデリング入門 PDF
PDF
PDF
PDF
PDF
PDF
リーンなコードを書こう:実践的なオブジェクト指向設計 PDF
PDF
3週連続DDDその3 ドメイン駆動設計 戦略的設計 PDF
PDF
3週連続DDDその1 ドメイン駆動設計の基本を理解する PDF
3週連続DDDその2 深いモデルの探求(ドメイン駆動設計 第3部) PPTX
PDF
Similar to ドメイン駆動設計入門
PDF
PDF
PDF
PPTX
PDF
PDF
PDF
DDD 20121106 SEA Forum November PDF
PDF
PDF
PDF
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~ PPTX
PPTX
PDF
20130202 ドメイン駆動設計読書会at名古屋のお誘い PDF
PDF
PDF
【JJUG CCC 2016 Fall 公開版】ドメイン駆動設計とscala 〜既存プロジェクトへの適用〜 PPTX
PDF
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】 PDF
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】 More from 増田 亨
PDF
PDF
事業活動モデル・システム機能モデル・ビジネスロジックの記述 PDF
PDF
PDF
PDF
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer PDF
PDF
PDF
PDF
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ PDF
PDF
PDF
DDD sample code explained in Java PDF
PDF
PDF
PDF
PDF
PDF
越境する情シス:進化可能なアーキテクチャを手に入れる PDF
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル ドメイン駆動設計入門
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
部品化アプローチ
• 集める
– 関係するデータとロジックを一つのクラスに
–関連するクラス群をパッケージに
• 目的に特化する
– 特化:PersonName,Money, ScheduledDate, …
– 汎用:String, BigDecimal, Date, …
• 業務用語の粒度にあわせた部品
– 「予定日」とか「合計金額」がクラス候補
– クラス=データとロジックの置き場所
- 23.
- 24.
多態
インタフェース宣言と実装クラス
• interface 季節料金
–price ()
• 実装クラス
– class 夏価格 implements 季節料金
– class 冬価格 implements 季節料金
• データとロジックの置き場所
– 夏の期間、夏の料金計算式 → 夏価格クラス
– 冬の期間、冬の料金計算式 → 冬価格クラス
• 使う側
– どの季節でも、季節料金#price() を呼ぶだけ
- 25.
多態
オブジェクトの生成と選択
Map<季節名,季節料金> 料金=
[ “夏”: new 夏価格(),
“冬” : new 冬価格() ];
price( “夏” )
{
料金.get(“夏”).price();
}
enum 季節
{
夏( new 夏価格()) , 冬( new 冬価格() ) ;
private 季節料金 料金;
季節( 季節料金 料金)
{
this.料金 = 料金
}
}
// 画面アプリケーション
// select ボックスを “夏” を選択
季節.valueOf( “夏” ).price()
// OR マッピング
enum 季節.夏 -> データベースに季節名を保存
データベースの季節名 -> enum.valuleOf(“夏” )
if 夏
return new 夏価格()
else
return new 冬価格()
※一か所だけ条件分岐が残る
- 26.
制御構造の再利用
• フレームワーク
– IoC: Inversion of Control (制御の反転)
• Control = if/else, switch, for, try-catch-throw, goto …
• Inversion:反転の意味
– アプリケーションプログラミング
» 制御構造を書く → 制御構造を書かない
• たとえば
– コレクションフレームワーク と for 文
– バリデーションフレームワーク と if 文
– ORマッピングフレームワーク と for 文/if 文
– MVC フレームワークと switch 文
- 27.
全体の建てつけ
アプリケーションサーバー
• アプリケーション起動イベントのリスニング
– HTTPリクエスト、非同期メッセージ、メール受信
– データベース変更、File 追加
• 文脈(Context ) に沿ったアプリケーションの実行
– ターゲットのオブジェクト#メソッドを判定・起動
– 環境依存性の分離(リソースの間接参照 JNDI etc.)
– 横断的関心事の実行 ロギング、セキュリティ、…
• たとえば
– Tomcat ( HTTP リクエストハンドラ)
– Active MQ + Mule ESB ( 非同期メッセージハンドラ)
– Jame ( メール受信ハンドラ)
- 28.
補足:パターンについて
• パターン
– アーキテクチャパターン: PoEAA, EIP, …
– GoF デザインパターン
• 確立したパターンは、自分で書く必要はなくなりつつある
– GoF のオブジェクト生成パターン
• Spring : Bean コンテナ の Bean 生成機能
• Java : enum (singleton)
– GoF の Strategy/State パターン
• Java : enum
– PoEAA のドメインモデルパターンとデータマッパ
• OR Mapping ツール
– PoEAA のフロントコントローラパターン
• Spring MVC Dispatcher Servlet
– EIP
• Mule ESB
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
機能モデリングの元ネタ
• 機能要求
– 機能要求一覧
–ユースケース一覧/ユースケース記述
– バックログアイテム、ユーザーストーリー、…
– 画面遷移図、画面イベント一覧
• ユーザマニュアル、オンラインヘルプ
– 既存システム
– 類似システム
• 業務体系
– 業務マニュアル
– 組織表、職務分掌規程
- 35.
- 36.
- 37.
ケーススタディ
プロジェクト初日のインプット
• Aプロジェクト
– ビジネス企画書の読み合わせ
–ドメインガイドブックの持ち寄り、ななめ読み
• Bプロジェクト
– 言語、ミドルウェア、フレームワーク、…
– ツール、サーバー環境、コミットルール、…
• Cプロジェクト
– マスタースケジュール、組織体制図、会議体、…
– WBS、マイルストーン、成果物、規約、…
• Dプロジェクト
– スプリント、バックログ、スタンダップミーティング、…
– テスト駆動、ペアプログラミング、継続的デリバリ、…
- 38.
- 39.
- 40.
- 41.
- 42.
目的特化
区分、種別、イベント/状態の宣言
• 静的に列挙できる場合
– enum宣言
• インタフェース宣言+実装クラス群+Singleton
Java コンパイラがやってくれる
• 外部のマスター定義を読み込む場合
– Map + singleton
• Spring の bean 生成 + autowired
• イベント/状態
– クラスを分ける
• イベント種類ごと
• 状態種類ごと
– 遷移ロジックをステートパターンで記述
- 43.
かたまりのパターン
• Bounded Context
–チームの関心スコープを明確にする
– ユビキタス言語
– 組織パターン
• モジュール
– 関心事の範囲を明確にするパッケージを宣言
– public スコープは最小限。基本はパッケージスコープ。
– モジュール間の依存関係を最少にする(方向、依存線の数)
• Aggregate
– 基礎部品 ( Value Oject ) の集合体
– 集合体の識別
• Aggregate の root オブジェクトとしての Entity パターン
– 必要なら用途別に Aggregate を用意する
• 顧客サマリー(一覧用),
• 顧客連絡先
• 顧客履歴
- 44.
- 45.
Aggregateと永続化
• データモデルとオブジェクトモデル
– データモデル( データのみ )
• 正規化が原則
• 導出可能データは保存しない
• すべての関係は、キーを元に 1 対多として構造化
• 参照方向は「多→1」に固定
• 構造的にデータ整合性を維持する
– オブジェクトモデル(データ+ロジック)
• 導出データもオブジェクトで表現する
– ロジックの置き場所として重要
• 関連の表現の自由度が高い
– ネットワーク構造、参照方向、多重度の制約
– データ整合性はロジックで維持する必要がある
- 46.
永続化
• SQL マッピングのすすめ
–正規化したデータモデルを、SELECT 文でオブ
ジェクト用に冗長化してマッピングする
• 危険な臭い
– OR マッピングの隠ぺいや SQL自動生成
• オブジェクトが、データの入れ物の設計だけにな
りがち
• ドメインモデル(オブジェクトモデル)の設計改
善の制約になりがち
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.