Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
How GitHub (no longer) Works
holman
310
140k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
Why Our Code Smells
bkeepers
PRO
334
57k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
The Cost Of JavaScript in 2023
addyosmani
45
6.9k
Producing Creativity
orderedlist
PRO
341
39k
Typedesign – Prime Four
hannesfritz
40
2.4k
Speed Design
sergeychernyshev
25
640
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
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