Slide 1

Slide 1 text

実践オブジェクト指向設計 〜Javaで学ぶオブジェクト指向(応用)〜 プロジェクト推進部 藤本 毅

Slide 2

Slide 2 text

講師自己紹介① 【名前】 藤本 毅(フジモト タケシ) 【所属】 プロジェクト推進部 【経歴】 前歴はIT企業、常駐型開発会社、スタートアップ 支援、通信会社を通してB2BからB2Cまで官公庁シ ステムからチャットサービス、広告、音楽、エン タメ、旅行、金融、飲食、HR等様々なシステムの 開発に携わる 2

Slide 3

Slide 3 text

講師自己紹介② 【言語・フレームワーク等】 Mac, Linux(CentOS, Debian, Ubuntu, Kali, Raspberry Pi ), Windows C#、C、C++、Clojure、Ruby、Python、Ocaml、Haskell、PHP、Java、Kotolin、Scala、 Swift、Objective-C、JavaScript、CoffeeScript、TypeScript、Go Ruby On Rails、CodeIgniter、Django、Spring、Laravel、Playframework、sokko React、 Backbone.js、Vue.js、TensorFlow ..etc 【直近の活動】 Web(フロントエンド、バックエンド)、インフラ(オンプレミス・クラウド)、サイバー セキュリティ、スマートフォン(iOS、Android、Tyzen)、電子回路・FPGA、機械学習・ ディープラーニング、3Dゲーム開発、OSやネットワーク等の低レイヤー技術等、長年の試 作やOSSの解析、業務経験を通して得た様々な知見や技術を生かし、それらを統合する研 究を個人でおこなっている 3

Slide 4

Slide 4 text

本日の講義のメインテーマ モデル中心設計 4

Slide 5

Slide 5 text

システムやアプリケーションの開発におい て最も重要な要素がモデルであるといえる 5

Slide 6

Slide 6 text

モデル中心設計の意義 変更に強く、理解・把握がしやすく、安定 したアプリケーションを実現できる 6

Slide 7

Slide 7 text

『モデル』とは? 7

Slide 8

Slide 8 text

モデルが生まれた背景には、研究者のアラン・ケイが提唱し た「Dynabook(ダイナブック)」という構想が端を発している 8 引用元:https://www.kyotoprize.org/2019/02/4550/

Slide 9

Slide 9 text

ダイナブックは現代のPCやスマートフォンの起源になっ ている重要なコンセプト 9 引用元:https://t-press-plus.com/compare_macbook_with_ipad/

Slide 10

Slide 10 text

Dynabook(ダイナブック) iPadに近い。。 10 引用元:https://ja.wikipedia.org/wiki/%E3%83%80%E3%82%A4%E3%83%8A%E3%83%96%E3%83%83%E3%82%AF

Slide 11

Slide 11 text

”ダイナブック”とオブジェクト指向 ダイナブックを構成する要素としてオブジェクト指向言 語のSmall Talk(スモール・トーク)が作られた 11

Slide 12

Slide 12 text

オブジェクト指向とMVC そのSmall Talkで実装する際の設計指針としてMVCアー キテクチャが提唱された 12

Slide 13

Slide 13 text

M : モデル(Model) V : ビュー(View) C : コントローラ(Controller) MVCアーキテクチャ システムを以下の要素に分けたシステムのアーキテクチャ 13

Slide 14

Slide 14 text

モデル(Model) ビジネスロジックやデータ処理を担当 ビュー(View) ユーザーに表示される画面やUIを担当 コントローラ(Controller) モデルとビューの間の橋渡し役 ※ViewやControllerはビジネスロジックを持たない 14

Slide 15

Slide 15 text

MVCは現在もWebアプリやRESTful API等 で幅広く用いられている 15

Slide 16

Slide 16 text

MVCの提唱者 MVCはアラン・ケイと同じXEROX PARC(ゼロックス・ パロアルト研究所)のトリグヴェ・リーンスカウク (Trygve Reenskaug)が1978-79年に提唱 16 引用元: https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%AA%E3%82%B0%E3%83%B4%E3%82%A7%E3%83%BB%E3%83%AA%E3%83%BC% E3%83%B3%E3%82%B9%E3%82%AB%E3%82%A6%E3%82%AF

Slide 17

Slide 17 text

MVC提唱当時のモデル “モデル”は元々はユーザ側が想起するシステムに関するイメージ や理解(mental model)とプログラムの構造を一致させるため の概念として考案された 17 引用元:https://folk.universitetetioslo.no/trygver/themes/mvc/mvc-index.html

Slide 18

Slide 18 text

モデルの構成要素 • ビジネスドメインに関連するデータ(複数ある場合はデータ間 の関連性も含む) • ビジネスロジック(モデルが表現する概念を実現するためのビ ジネスルールや操作) 18

Slide 19

Slide 19 text

モデルとオブジェクト指向 モデルは、「オブジェクトは属性(データ)と振る 舞い(関数・メソッド)を持つ」というオブジェク ト指向の原則にも則っている 19

Slide 20

Slide 20 text

ビジネスロジックの実装 一般的にはメソッドや関数として実装されるが、それら で用いられる正規表現等も含む定数やデータ構造なども 含まれる 20

Slide 21

Slide 21 text

ビジネスロジック(狭義) ビジネスロジックは本来、アプリケーションの中核となる機能や ビジネス上の処理を表すために使用される概念 21

Slide 22

Slide 22 text

つまり、ざっくり以下のようなイメージ モデル ユーザが想起するシステムに関する理解やイメージ システムの中核機能や処理 ビジネスロジック(狭義) ・ ・ 22

Slide 23

Slide 23 text

ビジネスロジック(広義) 現在の開発においては、プレゼンテーション層(画面)とデータ(DB)アクセ ス層以外の全てのロジックはビジネスロジックに該当するとみなすのが一般的 プレゼンテーション層 (ControllerやView) アプリケーション層 (ServiceやModel等を含む) データアクセス層 アプリケーションの機能や ビジネスプロセスを実装す るために必要なロジック (データの参照・生成・更 新・バリデーション、演 算・判定...etc) 23

Slide 24

Slide 24 text

現在のソフトウェア開発で用いられるモデル のパラダイムは2種類 データモデルとドメインモデル 24

Slide 25

Slide 25 text

データモデル データとその関連に焦点を合わせて、主にDBテーブルのレ コードで表現したモデル ドメインモデル ビジネスロジック(狭義)に焦点を合わせたモデル 25

Slide 26

Slide 26 text

データモデリングはデータを中心に、 ドメインモデリングはビジネスロジックを中心 に設計を行う手法 26

Slide 27

Slide 27 text

補足:ドメインとは ドメインはソフトウェアが扱う対象となるビジネスの知識や課題、 ビジネスルール、ビジネスプロセス、業務内容等を含んだ特定の 領域(業界独自の用語や慣習なども含む)を指す 27

Slide 28

Slide 28 text

ドメインモデル ドメインモデルはアプリケーションのドメインを表現する プレゼンテーション層 アプリケーション層 データアクセス層 Domain Model Entity Aggregate ValueObject 28

Slide 29

Slide 29 text

データモデル データベースの表現に密接に関わるモデル プレゼンテーション層 アプリケーション層 データアクセス層 Data Model Entity / DTO※等 29 ※DTOは厳密にはモデルでは ないが、事実上モデルとして使 用されることがある

Slide 30

Slide 30 text

当講義では データモデル中心の設計とドメインモデル 中心の設計 の両方のアプローチからFict PAYの設計・ 実装を解説する 30

Slide 31

Slide 31 text

サブ資料の構成 サブ資料①:オブジェクト指向の基礎 サブ資料②:Webシステムの基礎 サブ資料③:ドメインモデル中心の設計 サブ資料④:データモデル中心の設計 サブ資料⑤:その他設計や実装についてのポイント サブ資料⑥:Fict PAYプロジェクトについての補足 サブ資料⑦:Javaに関する補足 31

Slide 32

Slide 32 text

副読本について 32

Slide 33

Slide 33 text

『良いコード/悪いコードで学ぶ設計入門』 リクルートのプロダクト開発におけるソースコード共通化の課題の参 考になる部分が多く、著者の探求した知見が詰まっている 33

Slide 34

Slide 34 text

その他推薦書籍 34

Slide 35

Slide 35 text

『エリック・エヴァンズのドメイン駆動設計』 ドメイン駆動開発に限定しない、ソフトウェア設計 における深い知見が詰まっており、設計関連では、 現時点で日本語書籍の中で最高の本といえる 35

Slide 36

Slide 36 text

『実践ドメイン駆動設計』 エヴァンズの『ドメイン駆動設計』を実装 したもの。通称”IDDD本” 36

Slide 37

Slide 37 text

『「実践ドメイン駆動設計」から学ぶDDDの実装入門』 主に入門者向けの技術書で定評のある著者が “IDDD本”を日本語で解説した書籍 37 引用元:https://www.shoeisha.co.jp/book/detail/9784798161501

Slide 38

Slide 38 text

『プリンシプル オブ プログラミング』 3年目までに身につけたい 一生役立つ101の原理原則 コードベースではないものの、コーディングや設計 に必要な考え方がまとめられた良書 38

Slide 39

Slide 39 text

『現場で役立つシステム設計の原則』 元のドメイン駆動設計を咀嚼する形で、ドメインモデルを用い た設計について、Webシステムの基礎から触れている良書 39

Slide 40

Slide 40 text

『リーダブルコード』 より良いコードを書くためのシンプルで実践的なテクニック コーディングやコーディングの規則に関して幅 広い層に読まれている書籍 40

Slide 41

Slide 41 text

『Effective Java 第3版』 中級以上のJavaエンジニアは必読の良書 41

Slide 42

Slide 42 text

『達人に学ぶDB設計 徹底指南書』 DB設計で一冊を選ぶとしたら多くの開発者が推薦すると 思われる良書 42

Slide 43

Slide 43 text

推奨リポジトリ(GitHub) IDDD_Samples(https://github.com/VaughnVernon/IDDD_Samples) 『実践ドメイン駆動設計』のリポジトリ Library(https://github.com/system-sekkei/library) 『現場で役立つシステム設計の原則』を参考にドメイン駆動設計で作られた 43