Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
ドメイン駆動設計を実践しているプ
ログラマーの悩み
DDD Alliance! ドメイン駆動設計をやってみた 6つの現場からの報告
自己紹介
• 河上 晴司(かわかみ せいじ)
• Twi&er: @haljik
• 関西在住のフリーランスエンジニア
• そら製作所 という屋号でお仕事をしています
• JUG:関Javaのメンバー、DDD Alliance 発起人メンバー、...
今日話すこと
DDDを実践していて、主にプログラミングの面で普段悩んでいる
こと、自分の中でまだ解決策が見出せていないものを共有しま
す。
DDDそのものより、DDDを実践する上での技術的課題にスポッ
トを当てており、
とてもコンテキストの狭い...
背景
• Java
• BtoC
• Webアプリケーション開発
• 人材サービス
アーキテクチャ
主な技術要素 1
• UI層
• Thymeleaf HTMLをHTMLのまま記述できるテンプレートエ
ンジン
• Spring MVC リクエストデータをJavaオブジェクトにマッピン
グしたりとMVCの枠組みを提供してくれる
主な技術要素 2
• 永続化層
• MyBa&s 生のSQLが書け、SQLの結果とJavaオブジェクトのマ
ッピングが柔軟にできる
主な技術要素 3
• バリデーション
• BeanValida*on
このアーキテクチャの狙い
• 基本的にViewや、永続化層との間に余計な層ははさまないこと
• 永続化層や、UI層からモデルへのフィードバックをかけやすい
こと
• 永続化層や、UI層に漏れでたビジネスロジックをモデルに取込
みやすいこと
• ...
モデルの歪みに気づけること
人は作りやすい方向に流れてしまう
ので...
モデルにロジックを集める方向に作
りやすくする
この狙いはある程度のレベルで達成
できていると思う
とはいえ現実は
1つ目の悩みごと
RDBからのAggregate復元
• MyBa&sのコンストラクタマッピングは辛い
• コンストラクタマッピングしないと、デフォルトコンストラク
タが必要になる
• final宣言できない
• 1 + Nマッピング
こんなフレームワークがあれば
• ファクトリメソッド指定したマッピング
• 予め生成しておいたオブジェクトを別オブジェクトのフィール
ドにマッピング
2つ目の悩みごと
UIからのデータバインディング
• public な se+er が必要
• 場合によってはデフォルトコンストラクタも必要
• 型のミスマッチ問題
• 階層を持った多肢選択UIや、一覧表入力系UI
Indexed Propertyや、Mappe...
頑張ればはんとかなるけど… UIはす
ぐに変わるので変わる度に頑張るの
がつらい
3つ目の悩みごと
バリデーション
• 型のミスマッチ
• 意味的なチェック
• DBを必要とするチェック
• 限定的な文脈でのみ行われるチェック
これらを宣言的に凝集させる事のできるバリ
デーションフレームワークをまだ知らない
まとめ
• 要はデータの境界面がつらい
• Javaのオブジェクトから、「何か」への変換はそんなにつらく
ない
• 「何か」から、Javaのオブジェクトへの変換部分に課題が多い
最後に
いろいろ言いましたが、なんとかなっていま
す。怖がらずにドメイン駆動開発を実践して
いきましょう。
ドメイン駆動設計を実践するプログラマーの悩み
Upcoming SlideShare
Loading in …5
×

ドメイン駆動設計を実践するプログラマーの悩み

3,819 views

Published on

DDD Alliance ドメイン駆動設計をやってみた 6つの現場からの報告 でお話させていただいた時の資料です

Published in: Software
  • Follow the link, new dating source: ❤❤❤ http://bit.ly/2F7hN3u ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating direct: ❤❤❤ http://bit.ly/2F7hN3u ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

ドメイン駆動設計を実践するプログラマーの悩み

  1. 1. ドメイン駆動設計を実践しているプ ログラマーの悩み DDD Alliance! ドメイン駆動設計をやってみた 6つの現場からの報告
  2. 2. 自己紹介 • 河上 晴司(かわかみ せいじ) • Twi&er: @haljik • 関西在住のフリーランスエンジニア • そら製作所 という屋号でお仕事をしています • JUG:関Javaのメンバー、DDD Alliance 発起人メンバー、 関西 DDD.java 主催
  3. 3. 今日話すこと DDDを実践していて、主にプログラミングの面で普段悩んでいる こと、自分の中でまだ解決策が見出せていないものを共有しま す。 DDDそのものより、DDDを実践する上での技術的課題にスポッ トを当てており、 とてもコンテキストの狭いお話です。
  4. 4. 背景 • Java • BtoC • Webアプリケーション開発 • 人材サービス
  5. 5. アーキテクチャ
  6. 6. 主な技術要素 1 • UI層 • Thymeleaf HTMLをHTMLのまま記述できるテンプレートエ ンジン • Spring MVC リクエストデータをJavaオブジェクトにマッピン グしたりとMVCの枠組みを提供してくれる
  7. 7. 主な技術要素 2 • 永続化層 • MyBa&s 生のSQLが書け、SQLの結果とJavaオブジェクトのマ ッピングが柔軟にできる
  8. 8. 主な技術要素 3 • バリデーション • BeanValida*on
  9. 9. このアーキテクチャの狙い • 基本的にViewや、永続化層との間に余計な層ははさまないこと • 永続化層や、UI層からモデルへのフィードバックをかけやすい こと • 永続化層や、UI層に漏れでたビジネスロジックをモデルに取込 みやすいこと • SQLや、HTMLなどその層に特化した技術がそのまま泥臭く使 えること
  10. 10. モデルの歪みに気づけること
  11. 11. 人は作りやすい方向に流れてしまう ので... モデルにロジックを集める方向に作 りやすくする
  12. 12. この狙いはある程度のレベルで達成 できていると思う
  13. 13. とはいえ現実は
  14. 14. 1つ目の悩みごと
  15. 15. RDBからのAggregate復元 • MyBa&sのコンストラクタマッピングは辛い • コンストラクタマッピングしないと、デフォルトコンストラク タが必要になる • final宣言できない • 1 + Nマッピング
  16. 16. こんなフレームワークがあれば • ファクトリメソッド指定したマッピング • 予め生成しておいたオブジェクトを別オブジェクトのフィール ドにマッピング
  17. 17. 2つ目の悩みごと
  18. 18. UIからのデータバインディング • public な se+er が必要 • 場合によってはデフォルトコンストラクタも必要 • 型のミスマッチ問題 • 階層を持った多肢選択UIや、一覧表入力系UI Indexed Propertyや、Mapped Property のバインディングが煩雑
  19. 19. 頑張ればはんとかなるけど… UIはす ぐに変わるので変わる度に頑張るの がつらい
  20. 20. 3つ目の悩みごと
  21. 21. バリデーション • 型のミスマッチ • 意味的なチェック • DBを必要とするチェック • 限定的な文脈でのみ行われるチェック
  22. 22. これらを宣言的に凝集させる事のできるバリ デーションフレームワークをまだ知らない
  23. 23. まとめ • 要はデータの境界面がつらい • Javaのオブジェクトから、「何か」への変換はそんなにつらく ない • 「何か」から、Javaのオブジェクトへの変換部分に課題が多い
  24. 24. 最後に いろいろ言いましたが、なんとかなっていま す。怖がらずにドメイン駆動開発を実践して いきましょう。

×