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.3k
クリーンな実装を目指して.pdf
syarig
February 11, 2020
Tweet
Share
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
60
14k
Clear Off the Table
cherdarchuk
84
310k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
9
8.3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.9k
Building Your Own Lightsaber
phodgson
99
5.7k
Build your cross-platform service in a week with App Engine
jlugia
225
17k
BBQ
matthewcrist
80
8.8k
How GitHub (no longer) Works
holman
304
140k
How to name files
jennybc
65
93k
Statistics for Hackers
jakevdp
789
220k
Embracing the Ebb and Flow
colly
80
4.1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
6
1.5k
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