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
クリーンな実装を目指して.pdf
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
syarig
February 11, 2020
1
3.2k
クリーンな実装を目指して.pdf
syarig
February 11, 2020
Tweet
Share
Featured
See All Featured
Code Review Best Practice
trishagee
74
20k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
630
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
390
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.5k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.3k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
320
Designing Experiences People Love
moore
143
24k
BBQ
matthewcrist
89
10k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
Test your architecture with Archunit
thirion
1
2.2k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
390
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Transcript
クリーンな実装を目指して Hamee株式会社 開発部 伊藤有人 開発部 能美龍星
Hamee開発部 伊藤 有人 (Arito Ito) 新卒2年目Webエンジニア 画像管理チーム 1年目はアプリ開発 @syarig6
Hamee開発部 能美 龍星 (とんと) 新卒2年目Webエンジニア 1年目はQAエンジニア 仕事はバックエンド多め プライベートはフロント @27ma4_ton10
None
小田原でネットショップの運営と ECの業務を自動化する企業
Hameeには二つの軸があります ものを 作る ものを 自動で 売る
None
None
None
None
画像同期ツール
画像をモールに 登録するぞ 複数のネットショップを 運営するAさん
None
None
None
リーダー メンバー
Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc.
Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc.
Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc. 2019年 7月 〜 2019年 10月
Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc. 2019年 10月 〜 現在
Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc. 2019年 10月 〜 現在 転職します
Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc. ここのタスクが山積み ↓
ドメイン層の設計って 何が正しいんだ…? タスクを消化したいけど どこに何を書くべきか迷う…
ドメイン層の設計って 何が正しいんだ…? タスクを消化したいけど どこに何を書くべきか迷う… 試行錯誤したことを話します
こんな疑問を解消したい ▷ なぜそのクラスにメソッドを持たすのか ▷ そもそもなぜそのクラスを作るのか ▷ どうしてインターフェースを作るのか 注意:レガシーコードにおいてです
None
話したいこと ・木を見て森を見ず 細部を見ているあまり、 全体を見るのを忘れてしまうこと コンポーネントレベル の全体をみたお話をしたい
結論 ★ 処理の流れ ★ 依存関係 ★ 集約 画像同期の開発を例に やってよかったことを お話します
ネクストエンジンのコンテキスト
僕らが 作ったのは ここ
新機能開発 + リファクタリング
None
やってよかった3つのこと ▷ JSにViewとPresenterの責務をも たせられたこと ▷ バリューオブジェクトを追加し て概念の統一 ▷ ドメインサービスの追加で 垂直分割
▷ JSにViewとPresenterの責務をも たせられたこと ▷ バリューオブジェクトを追加し て概念の統一 ▷ ドメインサービスの追加で 垂直分割 やってよかった3つのこと
None
切り離し方式 ➢ ソースレベル ➢ デプロイレベル ➢ サービスレベル 結合度が低くなる
▷ JSにViewとPresenterの責務をも たせられたこと ▷ バリューオブジェクトを追加し て概念の統一 ▷ ドメインサービスの追加で 垂直分割 やってよかった3つのこと
既存機能ではユースケースごとに ロジックやデータ構造が異なっていた でも、どれもやっているのは画像登録
None
▷ JSにViewとPresenterの責務をも たせられたこと ▷ バリューオブジェクトを追加し て概念の統一 ▷ ドメインサービスの追加で 垂直分割 やってよかった3つのこと
None
None
集約について ➢ 更新を行う単位 ➢ 外部から呼ばれるはじめの集約 を集約ルートと呼ぶ
ユースケースによって 集約ルートが変わるの だけどどうしよう...
注目
まとめ ★ 処理の流れ ★ 依存関係 ★ 集約 この3点が管理され ていれば改修時の ストレス、手戻りが
かなり減ると感じた
今後について 1. レイヤ化アーキテクチャ 2. DIPの導入 3. マイクロサービス化 … 今ココ
今後について 1. レイヤ化アーキテクチャ 2. DIPの導入 3. マイクロサービス化 … 目指せマイクロサービス化! お話したことは
DIP導入するための準備
入力から出力に向かっ て各レイヤが下方向に 依存している
依存先を具象から抽象へ Domainにインターフェースを 作り、Domainに依存するよう にする
Hameeにはエンジニアが のびのびと開発できる環境があります。 小田原に遊びに来てください。
None