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
6
4.7k
実践オブジェクト指向設計
2023年度リクルート エンジニアコース新人研修の講義資料です
Recruit
PRO
August 10, 2023
Tweet
Share
More Decks by Recruit
See All by Recruit
スタサプ ForSCHOOLアプリのシンプルな設計
recruitengineers
PRO
3
910
リクルート流データ基盤塾~鶴谷と学ぶ~
recruitengineers
PRO
5
140
『SUUMO』 スマホサイト デザインリニューアルへの挑戦
recruitengineers
PRO
5
280
『リクルートダイレクトスカウト』 のリニューアルから振り返る: ビジョンドリブンの可能性
recruitengineers
PRO
3
270
負債あるモノリスのオブザーバビリティに組織で向き合う
recruitengineers
PRO
9
380
あなたの知らないiOS開発の世界
recruitengineers
PRO
4
310
大規模プロダクトにおける組織作りと技術ポートフォリオマネジメント
recruitengineers
PRO
4
440
OR学会2024秋_短期収益と将来のオフ方策評価性能を考慮したクーポン割当方策混合比の決定
recruitengineers
PRO
5
660
リクルート新人研修2024 テキスト生成AI活用
recruitengineers
PRO
12
1k
Other Decks in Technology
See All in Technology
Jr. Championsになって、強く連携しながらAWSをもっと使いたい!~AWSに対する期待と行動~
amixedcolor
0
190
Forget efficiency – Become more productive without the stress
ufried
0
140
【技術書典17】OpenFOAM(自宅で極める流体解析)2次元円柱まわりの流れ
kamakiri1225
0
210
VPC間の接続方法を整理してみた #自治体クラウド勉強会
non97
1
850
顧客が本当に必要だったもの - パフォーマンス改善編 / Make what is needed
soudai
24
6.8k
大規模データ基盤チームのオンプレTiDB運用への挑戦 / dpu-tidb
cyberagentdevelopers
PRO
1
110
来年もre:Invent2024 に行きたいあなたへ - “集中”と“つながり”で楽しむ -
ny7760
0
470
APIテスト自動化の勘所
yokawasa
7
4.2k
AWS re:Inventを徹底的に楽しむためのTips / Tips for thoroughly enjoying AWS re:Invent
yuj1osm
1
570
[JAWS-UG金沢支部×コンテナ支部合同企画]コンテナとは何か
furuton
3
260
ABEMA のコンテンツ制作を最適化!生成 AI x クラウド映像編集システム / abema-ai-editor
cyberagentdevelopers
PRO
1
180
新卒1年目が挑む!生成AI × マルチエージェントで実現する次世代オンボーディング / operation-ai-onboarding
cyberagentdevelopers
PRO
1
170
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
66
9.9k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Fontdeck: Realign not Redesign
paulrobertlloyd
81
5.2k
Bash Introduction
62gerente
608
210k
YesSQL, Process and Tooling at Scale
rocio
167
14k
KATA
mclloyd
29
13k
Into the Great Unknown - MozCon
thekraken
31
1.5k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Teambox: Starting and Learning
jrom
132
8.7k
Why Our Code Smells
bkeepers
PRO
334
57k
How to train your dragon (web standard)
notwaldorf
88
5.7k
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