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
6.3k
実践オブジェクト指向設計
2023年度リクルート エンジニアコース新人研修の講義資料です
Recruit
PRO
August 10, 2023
Tweet
Share
More Decks by Recruit
See All by Recruit
あなたの知らない Linuxカーネル脆弱性の世界
recruitengineers
PRO
3
100
dbtとBigQuery MLで実現する リクルートの営業支援基盤のモデル開発と保守運用
recruitengineers
PRO
3
140
『ホットペッパービューティー』のiOSアプリをUIKitからSwiftUIへ段階的に移行するためにやったこと
recruitengineers
PRO
4
1.6k
経営の意思決定を加速する 「事業KPIダッシュボード」構築の全貌
recruitengineers
PRO
4
260
Browser
recruitengineers
PRO
12
3.5k
JavaScript 研修
recruitengineers
PRO
8
2k
TypeScript入門
recruitengineers
PRO
37
14k
モダンフロントエンド 開発研修
recruitengineers
PRO
13
7.7k
Webアクセシビリティ入門
recruitengineers
PRO
4
2.1k
Other Decks in Technology
See All in Technology
Node.js 2025: What's new and what's next
ruyadorno
0
670
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
940
Click A, Buy B: Rethinking Conversion Attribution in ECommerce Recommendations
lycorptech_jp
PRO
0
110
「魔法少女まどか☆マギカ Magia Exedra」の多様なバトルの開発を柔軟かつ効率的に実現するためのPure C#とUnityの分離について
gree_tech
PRO
0
100
会社を支える Pythonという言語戦略 ~なぜPythonを主要言語にしているのか?~
curekoshimizu
1
130
20251014_Pythonを実務で徹底的に使いこなした話
ippei0923
0
220
OSSで50の競合と戦うためにやったこと
yamadashy
2
450
今この時代に技術とどう向き合うべきか
gree_tech
PRO
2
2.1k
[Codex Meetup Japan #1] Codex-Powered Mobile Apps Development
korodroid
2
1k
AWS UG Grantでグローバル20名に選出されてre:Inventに行く話と、マルチクラウドセキュリティの教科書を執筆した話 / The Story of Being Selected for the AWS UG Grant to Attending re:Invent, and Writing a Multi-Cloud Security Textbook
yuj1osm
1
100
「改善」ってこれでいいんだっけ?
ukigmo_hiro
0
370
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.8k
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
21k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
The Invisible Side of Design
smashingmag
302
51k
Balancing Empowerment & Direction
lara
5
690
jQuery: Nuts, Bolts and Bling
dougneiner
65
7.9k
Building Better People: How to give real-time feedback that sticks.
wjessup
369
20k
Context Engineering - Making Every Token Count
addyosmani
7
270
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.7k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
Speed Design
sergeychernyshev
32
1.2k
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