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.

現場で役立つシステム設計の原則

2,534 views

Published on

アジャイル札幌、DevLove仙台のジョイントイベントでお話させていただいた内容。

Published in: Software
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

現場で役立つシステム設計の原則

  1. 1. 現場で役立つシステム設計の原則 ~変更を楽で安全にするオブジェクト指向の実践技法 増田 亨 2017年8月25日
  2. 2. 第1章 小さくまとめてわかりやすくする 第2章 場合分けのロジックを整理する 第3章 業務ロジックをわかりやすく整理する 第4章 ドメインモデルの考え方で設計する 第5章 アプリケーション機能を組み立てる 第6章 データベースの設計とドメインオブジェクト 第7章 画面とドメインオブジェクトの設計を連動させる 第8章 アプリケーション間の連携 第9章 オブジェクト指向の開発プロセス 第10章 オブジェクト指向設計の学び方と教え方
  3. 3. 本日の内容 書きたくなかった 書き忘れた うまく書けなかった Q&A / 意見交換
  4. 4. 書きたくなかった • 自分はやっていないこと • コードの具体例で示せないこと • 現場で役に立たない総論や抽象論 • 自分では「どうでも良い」「それは違う」と思っ ていることを「それもありです」と言うこと stream(), extends, private final, … JPA, Active Record, Lombok, … TDD, CI, Docker, … Java以外のプログラミング言語 スクリプト言語
  5. 5. 書き忘れた 神崎さんのRDRAへの言及 ドメイン駆動設計との関係 いくつかの実装パターン いくつかのドメインオブジェクト 現場への取り入れ方
  6. 6. RDRA • 第4章 ドメインモデルの考え方で設計する – 全体と部分をいったりきたりしながら作っていく – 全体を俯瞰する道具 • RDRA/神崎さんと出会ってから、設計のアプロー チが変わった – リレーションシップ駆動の効果に目覚めた • 書くべきだった – RDRAの紹介 – 参考文献の提示
  7. 7. ドメイン駆動設計との関係 • 第5章 アプリケーション機能を組み立てる 第6章 データベース設計とドメインオブジェクト – Entity, Repository, Aggregateの設計パターン • エバンス本の真価 – 第3部 深いモデルの探求(の実践ストーリー) – 第4部 戦略的設計(誰がやるのか)
  8. 8. 実装パターン • 第1章 小さくまとめてわかりやすくする – Range オブジェクト ( from, to ) • 期間、範囲 • 上限が未指定/下限が未指定 • Range 間の演算 • 第2章 場合分けのロジックを整理する – Bean Validationによる if文の激減 – Spring MVC @Validated • バリデーショングループ
  9. 9. 覚えておくとよいドメインオブジェクト • Location パターン – 「場所」という関心事と判断/加工/計算ロジック • Category パターン – 「分類」という関心事と判断/加工/計算ロジック • Role パターン – 「権限」という関心事 – 「認可」という関心事 • できる/できない • 見える/見えない • その判断ロジック、導出ロジック
  10. 10. 現場への取り入れ方 • まずは自分から – 具体的に手を動かして – 少しずつ時間をかけて – 結果を形で見せる • コードの見た目(わかりやすさ) • 修正/拡張のスピード • 品質の安定性 • 唯一の正解とか最終回答とかはない – どんな答えも、もっと良いものがあるはず • 個人の裁量範囲は思っているより広い – 逸脱するとやばいポイントはあるが、そこを避ければだいたいはOK • やりすぎることで見えてくるものがある – 理想と現実の境目 – 「失敗体験」という財産
  11. 11. うまく書けなかった 自分の頭の中では、もっと書けると思っていたこと
  12. 12. 4章 ドメインモデルの考え方で設計する • 業務の関心事の基本パターンを覚えておく – 自分が使っているいろいろな分析パターン – コード例 • ドメインオブジェクトの設計を段階的に改善 – 集中のために切り捨てる – 切り捨てに保険をかける(安心して切り捨てる) – 小さな実験 – 違和感(なんか違う)へのこだわり – ブレークスルーと決断
  13. 13. 5章 アプリケーション機能を組み立てる • ドメインモデルと「入出力」の関心事の分離 – 分離できない時に起きがちな問題の具体例 – うまく分離できた場合の効果の具体例 • Repository – すべてのオブジェクトはメモリ上に存在すると考える • データベースの永続化の隠蔽手段とは別のとらえ方 – 設計パターン • findBy( Identifier identifier ) • listOf( Criteria criteria ) • 検査メソッド : count(), isExist(), …
  14. 14. 6章 データベースの設計とドメインオブジェクト • OR マッピングのコード例 (4点セット) – UserRepository.java (インタフェース宣言) – UserDatasource.java (実装クラス) – UserMapper.java – UserMapper.xml • 事実の記録のテーブル設計の具体例 – 前後関係の記録 – 関連性(交差テーブル)の記録 – 任意項目の扱い(未記入、未定、先送り、… ) • 参照系のテーブル設計の具体例 – リビジョン管理と最新レコードの参照 – 残高更新 – 未読/未済 – 状態遷移の記録と現在の状態の参照
  15. 15. 7章 画面とドメインオブジェクトの設計を連動させる • 画面デザインの4原則 近接/整列/対比/反復 – 画面の具体例 – HTML の具体例 – CSS クラス設計の具体例(コード例) • Semantic UI – ドメインオブジェクトとの連動のコード例 • Thymeleaf th:* 属性 – 画面の部品化の具体例 • Thymeleaf th:include/th:replace
  16. 16. 8章 アプリケーション間の連携 • コードの具体例 – @RestController – JSON/XML と オブジェクトのマッピング例 • 非同期メッセージング – 困っていること – 解決の考え方 – 実装の具体例 • ドメイン駆動設計の4部(戦略的設計)への関 連づけ
  17. 17. 9章 オブジェクト指向の開発プロセス • コードの自己文書化の具体例 – ソースコードをドキュメントとして活用する工夫 • SI(受託開発)ビジネスでの取り組み方 – 発注の立場 – 受注の立場 – 二次受け、三次受けの立場 • 役割分担制への取り組み – デザイナ – 品質保証部門 – 基盤チーム – 運用チーム …
  18. 18. 10章 オブジェクト指向の学び方と教え方 • オブジェクト指向の設計スキル向上のための コードレビューの重点ポイント – 導入期 – 広げていく段階 – 発展させる段階 • オブジェクト指向の基礎知識(?) – もとになったアイデアを知る(Simula 67) – 実現の仕組みを理解する( klass ポインタ ) – 設計スタイルの多様性と取捨選択 • いろいろな継承 • いろいろな多態 • いろいろなカプセル化
  19. 19. 現場への取り入れ方/根付かせ方 • 主体 – 個人/有志/チーム/組織 • ペース配分(学習曲線) – 徐々に時間をかけて – ブレークスルー – 徐々に時間をかけて • 方向 – 変えずに幅を広げてみる – 別の角度から取り組んでみる • 質と量 – 質の違いを実感する – 量をこなして体で覚える
  20. 20. どんな状況でも改善はできる どんなときでもあなたから改善を始められる どんなときでも今日から改善を始められる by Kent Beck, Extreme Programming 少しずつ 時間をかけて
  21. 21. Q & A 意見交換 第1章 小さくまとめてわかりやすくする 第2章 場合分けのロジックを整理する 第3章 業務ロジックをわかりやすく整理する 第4章 ドメインモデルの考え方で設計する 第5章 アプリケーション機能を組み立てる 第6章 データベースの設計とドメインオブジェクト 第7章 画面とドメインオブジェクトの設計を連動させる 第8章 アプリケーション間の連携 第9章 オブジェクト指向の開発プロセス 第10章 オブジェクト指向設計の学び方と教え方

×