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
syarig
February 11, 2020
1
2.6k
クリーンな実装を目指して.pdf
syarig
February 11, 2020
Tweet
Share
Featured
See All Featured
Fireside Chat
paigeccino
34
3k
Making Projects Easy
brettharned
115
5.9k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
KATA
mclloyd
29
14k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
410
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
The Language of Interfaces
destraynor
154
24k
Raft: Consensus for Rubyists
vanstee
136
6.6k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
96
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
10 Git Anti Patterns You Should be Aware of
lemiorhan
655
59k
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