Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
実践オブジェクト指向設計
Search
Recruit
PRO
August 10, 2023
Technology
7
5.2k
実践オブジェクト指向設計
2023年度リクルート エンジニアコース新人研修の講義資料です
Recruit
PRO
August 10, 2023
Tweet
Share
More Decks by Recruit
See All by Recruit
20250130_『SUUMO』の裏側!第2弾 ~機械学習エンジニアリング編
recruitengineers
PRO
0
73
顧客の声を集めて活かすリクルートPdMのVoC活用事例を徹底解剖!〜プロデザ!〜
recruitengineers
PRO
0
200
Asset Centric な データ変換パイプラインの攻略法
recruitengineers
PRO
1
120
Kotlin Multiplatformのポテンシャル
recruitengineers
PRO
2
190
デザイン初め新年会2025_川端_PdM Days2025
recruitengineers
PRO
0
50
Azure Functions HTTPトリガーにおけるタイムアウトでハマったこと
recruitengineers
PRO
2
350
実務につなげる数理最適化
recruitengineers
PRO
7
970
うちにも入れたいDatadog
recruitengineers
PRO
2
1.7k
リクルートのデータ基盤 Crois 年3倍成長!1日40,000コンテナの実行を支える AWS 活用とプラットフォームエンジニアリング
recruitengineers
PRO
3
530
Other Decks in Technology
See All in Technology
CloudWatch Container Insightsを使ったAmazon ECSのリソース監視
umekou
1
120
BLEAでAWSアカウントのセキュリティレベルを向上させよう
koheiyoshikawa
0
140
カスタムインストラクションでGitHub Copilotをカスタマイズ!
07jp27
7
630
Women in Agile
kawaguti
PRO
2
170
一人から始めたSREチーム3年の歩み - 求められるスキルの変化とチームのあり方 - / The three-year journey of the SRE team, which started all by myself
vtryo
7
5.7k
あなたはJVMの気持ちを理解できるか?
skrb
5
2k
生成AIを活用した機能を、顧客に提供するまでに乗り越えた『4つの壁』
toshiblues
1
210
バクラクの組織とアーキテクチャ(要約)2025/01版
shkomine
13
3k
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
18k
NOSTR, réseau social et espace de liberté décentralisé
rlifchitz
0
130
Redmineの意外と知らない便利機能 (Redmine 6.0対応版)
vividtone
0
190
panicを深ぼってみる
kworkdev
PRO
2
150
Featured
See All Featured
The Cult of Friendly URLs
andyhume
78
6.2k
Statistics for Hackers
jakevdp
797
220k
Facilitating Awesome Meetings
lara
51
6.2k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.5k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
6
220
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.3k
Designing Experiences People Love
moore
139
23k
Done Done
chrislema
182
16k
RailsConf 2023
tenderlove
29
980
YesSQL, Process and Tooling at Scale
rocio
171
14k
Writing Fast Ruby
sferik
628
61k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Transcript
実践オブジェクト指向設計 〜Javaで学ぶオブジェクト指向(応用)〜 プロジェクト推進部 藤本 毅
講師自己紹介① 【名前】 藤本 毅(フジモト タケシ) 【所属】 プロジェクト推進部 【経歴】 前歴はIT企業、常駐型開発会社、スタートアップ 支援、通信会社を通してB2BからB2Cまで官公庁シ
ステムからチャットサービス、広告、音楽、エン タメ、旅行、金融、飲食、HR等様々なシステムの 開発に携わる 2
講師自己紹介② 【言語・フレームワーク等】 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
本日の講義のメインテーマ モデル中心設計 4
システムやアプリケーションの開発におい て最も重要な要素がモデルであるといえる 5
モデル中心設計の意義 変更に強く、理解・把握がしやすく、安定 したアプリケーションを実現できる 6
『モデル』とは? 7
モデルが生まれた背景には、研究者のアラン・ケイが提唱し た「Dynabook(ダイナブック)」という構想が端を発している 8 引用元:https://www.kyotoprize.org/2019/02/4550/
ダイナブックは現代のPCやスマートフォンの起源になっ ている重要なコンセプト 9 引用元:https://t-press-plus.com/compare_macbook_with_ipad/
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
”ダイナブック”とオブジェクト指向 ダイナブックを構成する要素としてオブジェクト指向言 語のSmall Talk(スモール・トーク)が作られた 11
オブジェクト指向とMVC そのSmall Talkで実装する際の設計指針としてMVCアー キテクチャが提唱された 12
M : モデル(Model) V : ビュー(View) C : コントローラ(Controller) MVCアーキテクチャ
システムを以下の要素に分けたシステムのアーキテクチャ 13
モデル(Model) ビジネスロジックやデータ処理を担当 ビュー(View) ユーザーに表示される画面やUIを担当 コントローラ(Controller) モデルとビューの間の橋渡し役 ※ViewやControllerはビジネスロジックを持たない 14
MVCは現在もWebアプリやRESTful API等 で幅広く用いられている 15
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
MVC提唱当時のモデル “モデル”は元々はユーザ側が想起するシステムに関するイメージ や理解(mental model)とプログラムの構造を一致させるため の概念として考案された 17 引用元:https://folk.universitetetioslo.no/trygver/themes/mvc/mvc-index.html
モデルの構成要素 • ビジネスドメインに関連するデータ(複数ある場合はデータ間 の関連性も含む) • ビジネスロジック(モデルが表現する概念を実現するためのビ ジネスルールや操作) 18
モデルとオブジェクト指向 モデルは、「オブジェクトは属性(データ)と振る 舞い(関数・メソッド)を持つ」というオブジェク ト指向の原則にも則っている 19
ビジネスロジックの実装 一般的にはメソッドや関数として実装されるが、それら で用いられる正規表現等も含む定数やデータ構造なども 含まれる 20
ビジネスロジック(狭義) ビジネスロジックは本来、アプリケーションの中核となる機能や ビジネス上の処理を表すために使用される概念 21
つまり、ざっくり以下のようなイメージ モデル ユーザが想起するシステムに関する理解やイメージ システムの中核機能や処理 ビジネスロジック(狭義) ・ ・ 22
ビジネスロジック(広義) 現在の開発においては、プレゼンテーション層(画面)とデータ(DB)アクセ ス層以外の全てのロジックはビジネスロジックに該当するとみなすのが一般的 プレゼンテーション層 (ControllerやView) アプリケーション層 (ServiceやModel等を含む) データアクセス層 アプリケーションの機能や ビジネスプロセスを実装す
るために必要なロジック (データの参照・生成・更 新・バリデーション、演 算・判定...etc) 23
現在のソフトウェア開発で用いられるモデル のパラダイムは2種類 データモデルとドメインモデル 24
データモデル データとその関連に焦点を合わせて、主にDBテーブルのレ コードで表現したモデル ドメインモデル ビジネスロジック(狭義)に焦点を合わせたモデル 25
データモデリングはデータを中心に、 ドメインモデリングはビジネスロジックを中心 に設計を行う手法 26
補足:ドメインとは ドメインはソフトウェアが扱う対象となるビジネスの知識や課題、 ビジネスルール、ビジネスプロセス、業務内容等を含んだ特定の 領域(業界独自の用語や慣習なども含む)を指す 27
ドメインモデル ドメインモデルはアプリケーションのドメインを表現する プレゼンテーション層 アプリケーション層 データアクセス層 Domain Model Entity Aggregate ValueObject
28
データモデル データベースの表現に密接に関わるモデル プレゼンテーション層 アプリケーション層 データアクセス層 Data Model Entity / DTO※等
29 ※DTOは厳密にはモデルでは ないが、事実上モデルとして使 用されることがある
当講義では データモデル中心の設計とドメインモデル 中心の設計 の両方のアプローチからFict PAYの設計・ 実装を解説する 30
サブ資料の構成 サブ資料①:オブジェクト指向の基礎 サブ資料②:Webシステムの基礎 サブ資料③:ドメインモデル中心の設計 サブ資料④:データモデル中心の設計 サブ資料⑤:その他設計や実装についてのポイント サブ資料⑥:Fict PAYプロジェクトについての補足 サブ資料⑦:Javaに関する補足 31
副読本について 32
『良いコード/悪いコードで学ぶ設計入門』 リクルートのプロダクト開発におけるソースコード共通化の課題の参 考になる部分が多く、著者の探求した知見が詰まっている 33
その他推薦書籍 34
『エリック・エヴァンズのドメイン駆動設計』 ドメイン駆動開発に限定しない、ソフトウェア設計 における深い知見が詰まっており、設計関連では、 現時点で日本語書籍の中で最高の本といえる 35
『実践ドメイン駆動設計』 エヴァンズの『ドメイン駆動設計』を実装 したもの。通称”IDDD本” 36
『「実践ドメイン駆動設計」から学ぶDDDの実装入門』 主に入門者向けの技術書で定評のある著者が “IDDD本”を日本語で解説した書籍 37 引用元:https://www.shoeisha.co.jp/book/detail/9784798161501
『プリンシプル オブ プログラミング』 3年目までに身につけたい 一生役立つ101の原理原則 コードベースではないものの、コーディングや設計 に必要な考え方がまとめられた良書 38
『現場で役立つシステム設計の原則』 元のドメイン駆動設計を咀嚼する形で、ドメインモデルを用い た設計について、Webシステムの基礎から触れている良書 39
『リーダブルコード』 より良いコードを書くためのシンプルで実践的なテクニック コーディングやコーディングの規則に関して幅 広い層に読まれている書籍 40
『Effective Java 第3版』 中級以上のJavaエンジニアは必読の良書 41
『達人に学ぶDB設計 徹底指南書』 DB設計で一冊を選ぶとしたら多くの開発者が推薦すると 思われる良書 42
推奨リポジトリ(GitHub) IDDD_Samples(https://github.com/VaughnVernon/IDDD_Samples) 『実践ドメイン駆動設計』のリポジトリ Library(https://github.com/system-sekkei/library) 『現場で役立つシステム設計の原則』を参考にドメイン駆動設計で作られた 43