JSUGの勉強会に参加したので、そのメモ。
資料は公開されるだろうから、ここでしか聞けないことを中心にメモ(ツイート)したつもりだが、資料に盛り込まれている可能性は十分にある。なお、資料は以下の通り。
www.slideshare.net
個人的な感想
- ドメイン駆動のセッションや話は「ドメイン駆動はいいぞ」という感じで抽象的な話になりがちなことが多いのだが、今回はフレームワークが限定されたこともあってどのようなオブジェクトをどのように作っていくという具体的な話が聞けて満足だった
- ビジネスルールとドメインロジック
ソフトウェア開発においては契約、法令、明文化されてない商習慣などが分析対象
— ちょもち@Neo4jさわってる (@mike_neck) 2017年3月28日
ビジネスルールをプログラミングで表現したのがドメインロジック
- ソフトウェア開発のプロセス
- Spring Frameworkとドメイン駆動
- Spring Frameworkはドメインモデル以外のことを全部用意するフレームワーク
- さらにSpring Bootによってプロジェクトの初日から実運用を意識したアプリケーションが作れるようになった
いわゆるウォーターフォール(個人の所感を含む)
ソフトウェアの構成
トランザクションスクリプト = ドメインモデルを構築しない手続きだけを書いたソフトウェア
トランザクションスクリプト型のSpringアプリケーションの構成
ドメイン駆動設計によるSpringアプリケーションの構成
ドメイン駆動でアプリケーションを作ると、各層とは別にドメインモデルの層を用意して、ここをインクリメンタルに成長させていく
- ドメインモデル
- ビジネスロジックの要素は次のものしかない
- 数値
- 日付
- 文字列
- オブジェクトの種類は次の3パターン
- 値オブジェクト(数値/日付/文字列をラップしただけのオブジェクト、いわゆるValue Object)
- 区分オブジェクト(振る舞いをもった
enum
) - コレクションオブジェクト(
List
やSet
をラップしたオブジェクト(List
やSet
には直接触れさせないで、必要な操作だけを提供する))
- ビジネスロジックの要素は次のものしかない
- モジュールの単位
- ドメインオブジェクトとその他の層
ソースコードの文書化
具体的なドメインモデルによるSpringアプリケーションの構成
- HTML ⇔ Controller ⇔ ドメインオブジェクト(プレゼンテーション層)
- サービス層(アプリケーション層)
- データソース層
後半のトークセッション
ウォーターフォールでDDDは可能か?
— ちょもち@Neo4jさわってる (@mike_neck) 2017年3月28日
増田さん「ウォーターフォールでもいけるのではないかと思ってる。ただし、伝言ゲームでなくて、お客さんにインタビューして、設計して、実装するのが同じ人であること」
ドメインモデルの用語はどこから取り入れているのかという質問に対して
お客さんのドキュメントからドメインモデルの参考にする
— ちょもち@Neo4jさわってる (@mike_neck) 2017年3月28日
同じく名前についてわたびきさんのエピソード
「クラス名が80文字になるんだがどうすればいいか?」とエリック・エバンスに質問したら「お前、なんで日本語でクラスを作らないんだ」と返された
— ちょもち@Neo4jさわってる (@mike_neck) 2017年3月28日
ロジックの順序について
ドメインモデルには順序依存性がないように作る。順序依存性が必要なものはアプリケーション層(サービス)に書く
— ちょもち@Neo4jさわってる (@mike_neck) 2017年3月28日
既存コードが有る状態でのドメイン駆動の取り込み方 : 少しずつ入れていく