ドメイン駆動設計を実践しているプ
ログラマーの悩み
DDD Alliance! ドメイン駆動設計をやってみた 6つの現場からの報告
自己紹介
• 河上 晴司(かわかみ せいじ)
• Twi&er: @haljik
• 関西在住のフリーランスエンジニア
• そら製作所 という屋号でお仕事をしています
• JUG:関Javaのメンバー、DDD Alliance 発起人メンバー、 関西
DDD.java 主催
今日話すこと
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層に漏れでたビジネスロジックをモデルに取込
みやすいこと
• SQLや、HTMLなどその層に特化した技術がそのまま泥臭く使
えること
モデルの歪みに気づけること
人は作りやすい方向に流れてしまう
ので...
モデルにロジックを集める方向に作
りやすくする
この狙いはある程度のレベルで達成
できていると思う
とはいえ現実は
1つ目の悩みごと
RDBからのAggregate復元
• MyBa&sのコンストラクタマッピングは辛い
• コンストラクタマッピングしないと、デフォルトコンストラク
タが必要になる
• final宣言できない
• 1 + Nマッピング
こんなフレームワークがあれば
• ファクトリメソッド指定したマッピング
• 予め生成しておいたオブジェクトを別オブジェクトのフィール
ドにマッピング
2つ目の悩みごと
UIからのデータバインディング
• public な se+er が必要
• 場合によってはデフォルトコンストラクタも必要
• 型のミスマッチ問題
• 階層を持った多肢選択UIや、一覧表入力系UI
Indexed Propertyや、Mapped Property のバインディングが煩雑
頑張ればはんとかなるけど… UIはす
ぐに変わるので変わる度に頑張るの
がつらい
3つ目の悩みごと
バリデーション
• 型のミスマッチ
• 意味的なチェック
• DBを必要とするチェック
• 限定的な文脈でのみ行われるチェック
これらを宣言的に凝集させる事のできるバリ
デーションフレームワークをまだ知らない
まとめ
• 要はデータの境界面がつらい
• Javaのオブジェクトから、「何か」への変換はそんなにつらく
ない
• 「何か」から、Javaのオブジェクトへの変換部分に課題が多い
最後に
いろいろ言いましたが、なんとかなっていま
す。怖がらずにドメイン駆動開発を実践して
いきましょう。

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