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
5k
実践オブジェクト指向設計
2023年度リクルート エンジニアコース新人研修の講義資料です
Recruit
PRO
August 10, 2023
Tweet
Share
More Decks by Recruit
See All by Recruit
Azure Functions HTTPトリガーにおけるタイムアウトでハマったこと
recruitengineers
PRO
2
170
実務につなげる数理最適化
recruitengineers
PRO
6
710
うちにも入れたいDatadog
recruitengineers
PRO
2
460
リクルートのデータ基盤 Crois 年3倍成長!1日40,000コンテナの実行を支える AWS 活用とプラットフォームエンジニアリング
recruitengineers
PRO
2
340
Splunk Enterpriseで S3のデータを直接検索してみた!
recruitengineers
PRO
2
150
Looker APIを使い倒す ユーザーフィードバックを基にした継続的改善サイクル
recruitengineers
PRO
3
57
Kaggleふりかえり会〜LLM 20 Questions & ISIC 2024
recruitengineers
PRO
2
240
Balancing Revenue Goals and Off-Policy Evaluation Performance in Coupon Allocation
recruitengineers
PRO
2
52
Flutterによる 効率的なAndroid・iOS・Webアプリケーション開発の事例
recruitengineers
PRO
0
390
Other Decks in Technology
See All in Technology
DevFest 2024 Incheon / Songdo - Compose UI 조합 심화
wisemuji
0
120
継続的にアウトカムを生み出し ビジネスにつなげる、 戦略と運営に対するタイミーのQUEST(探求)
zigorou
0
630
どちらを使う?GitHub or Azure DevOps Ver. 24H2
kkamegawa
0
930
PHPからGoへのマイグレーション for DMMアフィリエイト
yabakokobayashi
1
170
20241214_WACATE2024冬_テスト設計技法をチョット俯瞰してみよう
kzsuzuki
3
620
事業貢献を考えるための技術改善の目標設計と改善実績 / Targeted design of technical improvements to consider business contribution and improvement performance
oomatomo
0
100
Work as an App Engineer
lycorp_recruit_jp
0
100
Snykで始めるセキュリティ担当者とSREと開発者が楽になる脆弱性対応 / Getting started with Snyk Vulnerability Response
yamaguchitk333
2
190
バクラクのドキュメント解析技術と実データにおける課題 / layerx-ccc-winter-2024
shimacos
2
1.1k
開発生産性向上! 育成を「改善」と捉えるエンジニア育成戦略
shoota
2
400
ゼロから創る横断SREチーム 挑戦と進化の軌跡
rvirus0817
2
270
小学3年生夏休みの自由研究「夏休みに Copilot で遊んでみた」
taichinakamura
0
170
Featured
See All Featured
Six Lessons from altMBA
skipperchong
27
3.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
The Pragmatic Product Professional
lauravandoore
32
6.3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Optimizing for Happiness
mojombo
376
70k
A better future with KSS
kneath
238
17k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
Raft: Consensus for Rubyists
vanstee
137
6.7k
The Invisible Side of Design
smashingmag
298
50k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
170
How STYLIGHT went responsive
nonsquared
95
5.2k
GraphQLとの向き合い方2022年版
quramy
44
13k
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