ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

ドメイン駆動設計 powered by Springを聞いてきた!

2017-03-29 10:34:37 | JavaとWeb
3月28日、

JSUG勉強会 2017年その3 ~ ドメイン駆動設計 powered by Spring

を聞いてきた!ので、内容をメモメモ




■ドメインロジックに集中せよ
・ドメイン駆動設計
 ソフトウェアの核心にある複雑さに立ち向かう

・設計を複雑にする要因
  技術的な複雑さ
  ドメインの複雑さ

・核心の複雑さに立ち向かう
 ドメインロジックに集中する
 モデルに基づき設計する
 インクリメンタルに開発する

・ドメインロジックに集中する
 ビジネスルール :分析の対象→遵守すべき約束事
 ドメインロジック:実装の対象→ビジネスルールのサブセット
                プログラミング言語で記述

・モデルに基づき設計する
 モデルとオブジェクト
 モデルのない開発プロセス
  情報収集
  分析整理
  仕様  モデル(アドオンの作業)
  設計
  実装
 →ドメインモデルを一切持っていない

 モデリングという作業を入れる
 →全体の見通しがよくなる

・インクリメンタルに開発する
 フェーズに分ける開発
  担当者が変わる:伝言ゲーム
  一方向 つじつまあわせ
 インクリメンタルな開発
  すべては発展途上になる
  同じチームで対応する

・素敵なお知らせ
 複雑さに立ち向かう強力な援軍
 Spring Framework Spring Boot
 Spring Framework
  ドメインモデル以外のことを全部用意するフレームワーク

 Spring Boot
  いったんは動かせ。Github作って。

・残念なお知らせ
 こんな開発もできる
  技術課題に集中する
  バックログをせっせと消化する
  フェーズに分けて伝言ゲーム・基盤とアプリの分離

・アンチパターン
 データ処理に焦点をあてる
  プレゼンテーション層:画面の入出力 @Controller
  アプリケーション層 :データベースの更新・参照の手続き @Service
  データソース層:データベースの入出力 @Repository
    |
    ↓ ドメインロジックを
  ドメインモデル
     ここに集約する

・ドメインモデル
 マーチンファウラー
  オブジェクトモデル
  振る舞いとデータ

・ドメインモデル
 ドメインロジックをオブジェクトで表現する

・ドメインモデルだと何がよいのか
 変更が楽で安全になる

・ドメインモデル:変更容易性
  ドメインロジックが重複しない
  どこにロジックが書いてあるか特定しやすい
  変更の影響を狭い範囲に限定できる

・トランザクションスクリプト
 同じロジックが重複する
 データ処理の流れを追いかけて探し回る
 後続の処理をすべて追いかける

・ドメインオブジェクト設計パターン
  ビジネスルール
  ドメインロジック

・ドメインロジックの最小単位
  演算の対象
   数値
   日付
   文字列
  演算
   等値の判定
   大小・順序
   範囲内
   有効
   型変換
   四則演算・変換
   
・最小単位→3つの型にまとめられる
 値オブジェクト
   汎用の型 → 独自に定義した型
 コレクションオブジェクト→リスト、セット
 区分オブジェクト → 振る舞いを持ったenum
            Strategy,Stateパターン

・設計原則
  モジュール化:複雑さに立ち向かうための工夫
    ドメインモデル:オブジェクトモデル/関心ごと
    トランザクションスクリプト:機能
  構造化:記述レベルを階層化する
    業務で使う用語
    ドメイン固有API→このレイヤをしっかり書く
    JavaコアAPI
    Java言語仕様
  ※動かすだけならドメイン固有APIはオーバーヘッドだが、
   ドメイン駆動設計には必要
  文書化
   ソースコードに自己文書化
    パッケージ名/クラス名/メソッド名

・ドメインロジックの文書化
 ドメインオブジェクトを使うほかの三層のコード
   ドメインロジックとの関係性を語るようになる
    (自己文書化が波及する)
 ソースコード以外の文書化
   業務マニュアル
   利用者ガイド
   (不要)開発・保守ドキュメント

・ドメインを隔離する
  基盤側にドメインロジックを持っていかないこと
   →つまり、アノテーションのかかったメソッドに
  データの入出力とドメインモデル

  画面やデータベースの都合をドメインに持ち込まない

・プレゼンテーション層とドメインオブジェクト
  ドメインオブジェクトを直接使う
  プレゼンテーション層の記述をドメインモデルに依存させる
  プレゼンテーション層に判断・加工・計算のロジックを置かない
   HTTPリクエスト→ドメインオブジェクト:DirectFieldAccess
   ドメインオブジェクト→HTTPレスポンス:HTMLテンプレート

・PRG

・DirectFieldAccess
@ControllerAdvice
 @initBinder
あとは#kanjava MVCで検索

・アプリケーション層とドメインオブジェクト
 @Service
 @Validated :引数にかけてしまう
 リポジトリを@Autowiredする

 ドメインの関心事としての永続化
  インターフェース宣言
  データベースの都合をドメインオブジェクトに持ち込まない

・データソース層とドメインオブジェクト
 @Repository
 MyBatisSQLmapping
  オブジェクトとテーブルは別の世界
  手作業で明示的にマッピングしている
 resultMapに明示的に書く

・まとめ

■トークセッション
・変える気があるか
・リードする人がいないと・・
・ぐれいるずをつかおう
・数百人にDDDの厚い本を実践する?
・経験者を作る
・リファクタリングの形で書き換える
・本開発が始まる前に作るしかない
  →縛りをかけてしまうと、
・ウォーターフォールでDDD
  いけるんじゃないか?
・データさんがかじを切るだけでも変わる
 →てらそるなに「リッチなドメインモデルは書かない」とかの記述に
  たいして、こういうときならというのをちょこっと書いてくれるだけでも、
  世の中は変わる。
・自分の知らないドメインは
  →パクってくる。Day1はできてない。でも1週目にはできていないと・・
   用語集とかは渡していない
・業務で使う日本語:横幅いっぱいになる:日本語でクラス作る?
  enumは日本語で書いている。日本語でやると違和感
  大規模はローマ字、子音だけはあるけど、
・ドメインモデルを作るコツ
  値オブジェクト:ドメイン駆動はオーバーヘッド 結果的によくなる
・実装 MyBatisでなくてもJPAでもできるけど、
・オブジェクトの組み合わせでロジックを作る
 順序依存性があるものは、サービスに書いている

  
この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« これってIoT?「メルコHD、... | トップ | AIの分類 »
最新の画像もっと見る

JavaとWeb」カテゴリの最新記事