SlideShare a Scribd company logo
1 of 23
わんくま同盟 名古屋勉強会 #42
システム設計の原則
書籍「現場で役立つシステム設計の原則」を読んで
2017/09/02(土)
You&I
わんくま同盟 名古屋勉強会 #42
ジコ、ショウカイ。
• H/N: You&I(読み:ユーアンドアイ)
• SNS: @you_and_i
• 出身: 生まれも育ちも名古屋市
• 年齢: 40代
• 本職: 商学部出身の職業プログラマ
• 言語: C++, C#他
•所属: プロ生勉強会 名古屋支部
名古屋アジャイル勉強会
わんくま同盟 名古屋勉強会
わんくま同盟 名古屋勉強会 #42
AGENDA
1. コンテキスト合わせ
2. 書籍紹介
3. 感想戦
わんくま同盟 名古屋勉強会 #42
1. コンテキスト合わせ
システム設計の原則
わんくま同盟 名古屋勉強会 #42
1. コンテキスト合わせ
カオスモデル
構造化分析設計(SADT)
オブジェクト指向分析設計(OOAD)
ドメイン駆動設計(DDD)
わんくま同盟 名古屋勉強会 #42
1. コンテキスト合わせ
• さて、普段どのようにソフトウェアの設計
を行っていますか?
• 開発プロセスによっては、実装専門でそも
そも設計などしないって場合もあるでしょ
うけどね・・・。
わんくま同盟 名古屋勉強会 #42
1. コンテキスト合わせ
• ソフトウェア設計に必要な要素
– コンピュータの知識
• 動作プラットフォーム
• 規格の知識
– プログラミングの知識
• 開発言語
• データベース
– プロダクト・業務知識
• 関連法律の知識
• 要件定義
わんくま同盟 名古屋勉強会 #42
1. コンテキスト合わせ
• このセッションは、書籍「現場で役立つシ
ステム設計の原則」を読んでソフトウェア
設計でどうあるべき・どうやるべきについ
て、夏休み宿題の読書感想文じゃないです
けどもツラツラと書いてみたいと思います。
わんくま同盟 名古屋勉強会 #42
2. 書籍紹介
システム設計の原則
わんくま同盟 名古屋勉強会 #42
2. 書籍紹介
• 現場で役立つシステム設計の原則
– 出版社 技術評論社
– 発売 2017/07/18
– 著者 増田 亨
– 定価 2,940円(税別)
わんくま同盟 名古屋勉強会 #42
2. 書籍紹介
目次
1. 小さくまとめてわかりやすくする
2. 場合分けのロジックを整理する
3. 業務ロジックをわかりやすく整理する
4. ドメインモデルの考え方で設計する
5. アプリケーション機能を組み立てる
6. データベースの設計とドメインオブジェクト
7. 画面とドメインオブジェクトの設計を連動させる
8. アプリケーション間の連携
9. オブジェクト指向の開発プロセス
10. オブジェクト指向設計の学び方と教え方
わんくま同盟 名古屋勉強会 #42
2. 書籍紹介 – 解説(1/10)
• 小さくまとめてわかりやすくする
– 目的・利点
• 1機能=1クラス等で実装をシンプルに
• 変更に強い仕組み
– 実践
• クラス間の共通部分を切り出す
• 変数やクラスは共通化しないで目的別に定義する
• ビジネスロジックのデータをクラスで「型」とし
て定義する
わんくま同盟 名古屋勉強会 #42
2. 書籍紹介 – 解説(2/10)
• 場合分けのロジックを整理する
– 目的・利点
• 実装をシンプルに
• 変更に強い仕組み
– 実践
• if文ではelse句を使わない
• 早期リターン
わんくま同盟 名古屋勉強会 #42
2. 書籍紹介 – 解説(3/10)
• 業務ロジックをわかりやすく整理する
– 目的・利点
• 実装の一元化
– 実践
• データとロジックは分離しないでドメインオブ
ジェクトとして定義する
– データクラスを作らない
• 三層システム+ドメインモデルで設計する
– プレゼンテーション層
– アプリケーション層 => ドメインモデル
– データソース層
わんくま同盟 名古屋勉強会 #42
2. 書籍紹介 – 解説(4/10)
• ドメインモデルの考え方で設計する
– 解説
• 分析
– システムの理解
– 顧客ヒアリング
• 設計
– クラス・変数の命名
– アナリシスパターンの発見
– 実践
• 重要な部分から手をつける
わんくま同盟 名古屋勉強会 #42
2. 書籍紹介 – 解説(5/10)
• アプリケーション機能を組み立てる
– 実践
• アプリケーション層においてビジネスロジックが
実装されないようにする
• メソッドにnullを渡したり返さない
• シナリオクラスを利用して小さく分けたクラス群
を利用する流れを明確化する
わんくま同盟 名古屋勉強会 #42
2. 書籍紹介 – 解説(6/10)
• データベースの設計とドメインオブジェク
ト
– 実践
• DB設計
– NOT NULL制約
– 一意性制約
– 外部参照キー制約
• UPDATEを禁止しINSERT/DELETEのみ
わんくま同盟 名古屋勉強会 #42
2. 書籍紹介 – 解説(7/10)
• 画面とドメインオブジェクトの設計を連動
させる
– 実践
• 画面ロジックにビジネスロジックが入り込まない
ようにする
• 一括入力画面ではなく入力項目毎に画面を用意す
るタスクベースUIを採用する
わんくま同盟 名古屋勉強会 #42
2. 書籍紹介 – 解説(8/10)
• アプリケーション間の連携
– 実践
• 疎結合を基本として連携する
• REST API設計
– 登録と参照は分ける
– リソースの単位を分ける
• マイクロサービス設計
わんくま同盟 名古屋勉強会 #42
2. 書籍紹介 – 解説(9/10)
• オブジェクト指向の開発プロセス
– 実践
• 基本はV字モデル
• ドメインモデル作成を中心に進める
• ドキュメントを減らし必要なものに限定する
– 質疑応答
– 議事録(ホワイトボード)
– 取扱説明書
わんくま同盟 名古屋勉強会 #42
2. 書籍紹介 – 解説(10/10)
• オブジェクト指向設計の学び方と教え方
– 実践
• 既存コードのリファクタリング
• オブジェクト指向分析設計を取り入れたコーディング
規約に基づき実装
– メソッド内のインデントは1階層まで
– else句は使用禁止
– すべてのプリミティブ型と文字列型はラッパークラスを用
意する
– 1行につきドット(.)は1つまで
– 変数・メソッド・クラスのラベルは省略しない
– 1クラスにつきメンバ変数は2つまで
– コレクションクラスは、データとロジックをまとめた
ファーストクラスコレクションオブジェクトを作成する
– getter/setter/プロパティ使用禁止
– すべてのエンティティを小さくする
わんくま同盟 名古屋勉強会 #42
3. 感想戦
システム設計の原則
わんくま同盟 名古屋勉強会 #42
3. 感想戦
• ドメイン駆動設計って難しい
– 業務の分析と設計を行う必要がある
• このスキルセットを持った人は少ない
• どうするか?
1. ドメインオブジェクト設計チームを作って設計
2. 設計を基に実装チームで実装する
3. 品証部門で試験する
4. アレ?これって・・・ダメ。ゼッタイ。

More Related Content

Similar to システム設計の原則

並列処理について
並列処理について並列処理について
並列処理についてYou&I
 
セッション発表のスゝメ
セッション発表のスゝメセッション発表のスゝメ
セッション発表のスゝメYou&I
 
かなしき だるやなぎちゃん ~海老を獲りに行く話~
かなしき だるやなぎちゃん ~海老を獲りに行く話~かなしき だるやなぎちゃん ~海老を獲りに行く話~
かなしき だるやなぎちゃん ~海老を獲りに行く話~You&I
 
e-Learning Design for Teacher
e-Learning Design for Teachere-Learning Design for Teacher
e-Learning Design for TeacherSunami Hokuto
 
アジャイルにプロジェクトの"なぜ"を考える、インセプションデッキワークショップ
アジャイルにプロジェクトの"なぜ"を考える、インセプションデッキワークショップアジャイルにプロジェクトの"なぜ"を考える、インセプションデッキワークショップ
アジャイルにプロジェクトの"なぜ"を考える、インセプションデッキワークショップYou&I
 
ApiPortで.NETアプリの依存関係を調べよう
ApiPortで.NETアプリの依存関係を調べようApiPortで.NETアプリの依存関係を調べよう
ApiPortで.NETアプリの依存関係を調べようYou&I
 
あなたの知らないセキュリティ規格の話
あなたの知らないセキュリティ規格の話あなたの知らないセキュリティ規格の話
あなたの知らないセキュリティ規格の話You&I
 
すぱこーに学ぶアプリ開発の第一歩
すぱこーに学ぶアプリ開発の第一歩すぱこーに学ぶアプリ開発の第一歩
すぱこーに学ぶアプリ開発の第一歩You&I
 
Hour of-code-2016冬-シンポジウム
Hour of-code-2016冬-シンポジウムHour of-code-2016冬-シンポジウム
Hour of-code-2016冬-シンポジウムYuta Tonegawa
 
【Fan】学びの場づくり、"勝手に"最先端はこれだ! コンテンツデザインからコミュニティデザインへ
【Fan】学びの場づくり、"勝手に"最先端はこれだ! コンテンツデザインからコミュニティデザインへ【Fan】学びの場づくり、"勝手に"最先端はこれだ! コンテンツデザインからコミュニティデザインへ
【Fan】学びの場づくり、"勝手に"最先端はこれだ! コンテンツデザインからコミュニティデザインへJun Nakahara
 
オブジェクト指向設計の原則
オブジェクト指向設計の原則オブジェクト指向設計の原則
オブジェクト指向設計の原則Toru Koido
 
0から始めるUXデザイン(UXデザインの組織を作る)
0から始めるUXデザイン(UXデザインの組織を作る)0から始めるUXデザイン(UXデザインの組織を作る)
0から始めるUXデザイン(UXデザインの組織を作る)Jiji Kim
 
負けない組織の原則を知る ~仕事の型を身につけよう~
負けない組織の原則を知る ~仕事の型を身につけよう~負けない組織の原則を知る ~仕事の型を身につけよう~
負けない組織の原則を知る ~仕事の型を身につけよう~You&I
 
ペアプログラミング?
ペアプログラミング?ペアプログラミング?
ペアプログラミング?You&I
 
プランニングポーカーで学ぶ相対見積
プランニングポーカーで学ぶ相対見積プランニングポーカーで学ぶ相対見積
プランニングポーカーで学ぶ相対見積You&I
 
社内勉強会開催の足跡
社内勉強会開催の足跡社内勉強会開催の足跡
社内勉強会開催の足跡Ruketa
 

Similar to システム設計の原則 (20)

並列処理について
並列処理について並列処理について
並列処理について
 
セッション発表のスゝメ
セッション発表のスゝメセッション発表のスゝメ
セッション発表のスゝメ
 
かなしき だるやなぎちゃん ~海老を獲りに行く話~
かなしき だるやなぎちゃん ~海老を獲りに行く話~かなしき だるやなぎちゃん ~海老を獲りに行く話~
かなしき だるやなぎちゃん ~海老を獲りに行く話~
 
それはコトだ
それはコトだそれはコトだ
それはコトだ
 
e-Learning Design for Teacher
e-Learning Design for Teachere-Learning Design for Teacher
e-Learning Design for Teacher
 
アジャイルにプロジェクトの"なぜ"を考える、インセプションデッキワークショップ
アジャイルにプロジェクトの"なぜ"を考える、インセプションデッキワークショップアジャイルにプロジェクトの"なぜ"を考える、インセプションデッキワークショップ
アジャイルにプロジェクトの"なぜ"を考える、インセプションデッキワークショップ
 
ApiPortで.NETアプリの依存関係を調べよう
ApiPortで.NETアプリの依存関係を調べようApiPortで.NETアプリの依存関係を調べよう
ApiPortで.NETアプリの依存関係を調べよう
 
あなたの知らないセキュリティ規格の話
あなたの知らないセキュリティ規格の話あなたの知らないセキュリティ規格の話
あなたの知らないセキュリティ規格の話
 
すぱこーに学ぶアプリ開発の第一歩
すぱこーに学ぶアプリ開発の第一歩すぱこーに学ぶアプリ開発の第一歩
すぱこーに学ぶアプリ開発の第一歩
 
Hour of-code-2016冬-シンポジウム
Hour of-code-2016冬-シンポジウムHour of-code-2016冬-シンポジウム
Hour of-code-2016冬-シンポジウム
 
【Fan】学びの場づくり、"勝手に"最先端はこれだ! コンテンツデザインからコミュニティデザインへ
【Fan】学びの場づくり、"勝手に"最先端はこれだ! コンテンツデザインからコミュニティデザインへ【Fan】学びの場づくり、"勝手に"最先端はこれだ! コンテンツデザインからコミュニティデザインへ
【Fan】学びの場づくり、"勝手に"最先端はこれだ! コンテンツデザインからコミュニティデザインへ
 
オブジェクト指向設計の原則
オブジェクト指向設計の原則オブジェクト指向設計の原則
オブジェクト指向設計の原則
 
0から始めるUXデザイン(UXデザインの組織を作る)
0から始めるUXデザイン(UXデザインの組織を作る)0から始めるUXデザイン(UXデザインの組織を作る)
0から始めるUXデザイン(UXデザインの組織を作る)
 
4DX
4DX4DX
4DX
 
デザイン思考入門クラス 2014年11月2日
デザイン思考入門クラス 2014年11月2日デザイン思考入門クラス 2014年11月2日
デザイン思考入門クラス 2014年11月2日
 
負けない組織の原則を知る ~仕事の型を身につけよう~
負けない組織の原則を知る ~仕事の型を身につけよう~負けない組織の原則を知る ~仕事の型を身につけよう~
負けない組織の原則を知る ~仕事の型を身につけよう~
 
名古屋でKYT
名古屋でKYT名古屋でKYT
名古屋でKYT
 
ペアプログラミング?
ペアプログラミング?ペアプログラミング?
ペアプログラミング?
 
プランニングポーカーで学ぶ相対見積
プランニングポーカーで学ぶ相対見積プランニングポーカーで学ぶ相対見積
プランニングポーカーで学ぶ相対見積
 
社内勉強会開催の足跡
社内勉強会開催の足跡社内勉強会開催の足跡
社内勉強会開催の足跡
 

システム設計の原則

  • 2. わんくま同盟 名古屋勉強会 #42 ジコ、ショウカイ。 • H/N: You&I(読み:ユーアンドアイ) • SNS: @you_and_i • 出身: 生まれも育ちも名古屋市 • 年齢: 40代 • 本職: 商学部出身の職業プログラマ • 言語: C++, C#他 •所属: プロ生勉強会 名古屋支部 名古屋アジャイル勉強会 わんくま同盟 名古屋勉強会
  • 3. わんくま同盟 名古屋勉強会 #42 AGENDA 1. コンテキスト合わせ 2. 書籍紹介 3. 感想戦
  • 4. わんくま同盟 名古屋勉強会 #42 1. コンテキスト合わせ システム設計の原則
  • 5. わんくま同盟 名古屋勉強会 #42 1. コンテキスト合わせ カオスモデル 構造化分析設計(SADT) オブジェクト指向分析設計(OOAD) ドメイン駆動設計(DDD)
  • 6. わんくま同盟 名古屋勉強会 #42 1. コンテキスト合わせ • さて、普段どのようにソフトウェアの設計 を行っていますか? • 開発プロセスによっては、実装専門でそも そも設計などしないって場合もあるでしょ うけどね・・・。
  • 7. わんくま同盟 名古屋勉強会 #42 1. コンテキスト合わせ • ソフトウェア設計に必要な要素 – コンピュータの知識 • 動作プラットフォーム • 規格の知識 – プログラミングの知識 • 開発言語 • データベース – プロダクト・業務知識 • 関連法律の知識 • 要件定義
  • 8. わんくま同盟 名古屋勉強会 #42 1. コンテキスト合わせ • このセッションは、書籍「現場で役立つシ ステム設計の原則」を読んでソフトウェア 設計でどうあるべき・どうやるべきについ て、夏休み宿題の読書感想文じゃないです けどもツラツラと書いてみたいと思います。
  • 9. わんくま同盟 名古屋勉強会 #42 2. 書籍紹介 システム設計の原則
  • 10. わんくま同盟 名古屋勉強会 #42 2. 書籍紹介 • 現場で役立つシステム設計の原則 – 出版社 技術評論社 – 発売 2017/07/18 – 著者 増田 亨 – 定価 2,940円(税別)
  • 11. わんくま同盟 名古屋勉強会 #42 2. 書籍紹介 目次 1. 小さくまとめてわかりやすくする 2. 場合分けのロジックを整理する 3. 業務ロジックをわかりやすく整理する 4. ドメインモデルの考え方で設計する 5. アプリケーション機能を組み立てる 6. データベースの設計とドメインオブジェクト 7. 画面とドメインオブジェクトの設計を連動させる 8. アプリケーション間の連携 9. オブジェクト指向の開発プロセス 10. オブジェクト指向設計の学び方と教え方
  • 12. わんくま同盟 名古屋勉強会 #42 2. 書籍紹介 – 解説(1/10) • 小さくまとめてわかりやすくする – 目的・利点 • 1機能=1クラス等で実装をシンプルに • 変更に強い仕組み – 実践 • クラス間の共通部分を切り出す • 変数やクラスは共通化しないで目的別に定義する • ビジネスロジックのデータをクラスで「型」とし て定義する
  • 13. わんくま同盟 名古屋勉強会 #42 2. 書籍紹介 – 解説(2/10) • 場合分けのロジックを整理する – 目的・利点 • 実装をシンプルに • 変更に強い仕組み – 実践 • if文ではelse句を使わない • 早期リターン
  • 14. わんくま同盟 名古屋勉強会 #42 2. 書籍紹介 – 解説(3/10) • 業務ロジックをわかりやすく整理する – 目的・利点 • 実装の一元化 – 実践 • データとロジックは分離しないでドメインオブ ジェクトとして定義する – データクラスを作らない • 三層システム+ドメインモデルで設計する – プレゼンテーション層 – アプリケーション層 => ドメインモデル – データソース層
  • 15. わんくま同盟 名古屋勉強会 #42 2. 書籍紹介 – 解説(4/10) • ドメインモデルの考え方で設計する – 解説 • 分析 – システムの理解 – 顧客ヒアリング • 設計 – クラス・変数の命名 – アナリシスパターンの発見 – 実践 • 重要な部分から手をつける
  • 16. わんくま同盟 名古屋勉強会 #42 2. 書籍紹介 – 解説(5/10) • アプリケーション機能を組み立てる – 実践 • アプリケーション層においてビジネスロジックが 実装されないようにする • メソッドにnullを渡したり返さない • シナリオクラスを利用して小さく分けたクラス群 を利用する流れを明確化する
  • 17. わんくま同盟 名古屋勉強会 #42 2. 書籍紹介 – 解説(6/10) • データベースの設計とドメインオブジェク ト – 実践 • DB設計 – NOT NULL制約 – 一意性制約 – 外部参照キー制約 • UPDATEを禁止しINSERT/DELETEのみ
  • 18. わんくま同盟 名古屋勉強会 #42 2. 書籍紹介 – 解説(7/10) • 画面とドメインオブジェクトの設計を連動 させる – 実践 • 画面ロジックにビジネスロジックが入り込まない ようにする • 一括入力画面ではなく入力項目毎に画面を用意す るタスクベースUIを採用する
  • 19. わんくま同盟 名古屋勉強会 #42 2. 書籍紹介 – 解説(8/10) • アプリケーション間の連携 – 実践 • 疎結合を基本として連携する • REST API設計 – 登録と参照は分ける – リソースの単位を分ける • マイクロサービス設計
  • 20. わんくま同盟 名古屋勉強会 #42 2. 書籍紹介 – 解説(9/10) • オブジェクト指向の開発プロセス – 実践 • 基本はV字モデル • ドメインモデル作成を中心に進める • ドキュメントを減らし必要なものに限定する – 質疑応答 – 議事録(ホワイトボード) – 取扱説明書
  • 21. わんくま同盟 名古屋勉強会 #42 2. 書籍紹介 – 解説(10/10) • オブジェクト指向設計の学び方と教え方 – 実践 • 既存コードのリファクタリング • オブジェクト指向分析設計を取り入れたコーディング 規約に基づき実装 – メソッド内のインデントは1階層まで – else句は使用禁止 – すべてのプリミティブ型と文字列型はラッパークラスを用 意する – 1行につきドット(.)は1つまで – 変数・メソッド・クラスのラベルは省略しない – 1クラスにつきメンバ変数は2つまで – コレクションクラスは、データとロジックをまとめた ファーストクラスコレクションオブジェクトを作成する – getter/setter/プロパティ使用禁止 – すべてのエンティティを小さくする
  • 22. わんくま同盟 名古屋勉強会 #42 3. 感想戦 システム設計の原則
  • 23. わんくま同盟 名古屋勉強会 #42 3. 感想戦 • ドメイン駆動設計って難しい – 業務の分析と設計を行う必要がある • このスキルセットを持った人は少ない • どうするか? 1. ドメインオブジェクト設計チームを作って設計 2. 設計を基に実装チームで実装する 3. 品証部門で試験する 4. アレ?これって・・・ダメ。ゼッタイ。