クリーンな実装を目指して.pdf
by
syarig
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
クリーンな実装を目指して Hamee株式会社 開発部 伊藤有人 開発部 能美龍星
Slide 2
Slide 2 text
Hamee開発部 伊藤 有人 (Arito Ito) 新卒2年目Webエンジニア 画像管理チーム 1年目はアプリ開発 @syarig6
Slide 3
Slide 3 text
Hamee開発部 能美 龍星 (とんと) 新卒2年目Webエンジニア 1年目はQAエンジニア 仕事はバックエンド多め プライベートはフロント @27ma4_ton10
Slide 4
Slide 4 text
No content
Slide 5
Slide 5 text
小田原でネットショップの運営と ECの業務を自動化する企業
Slide 6
Slide 6 text
Hameeには二つの軸があります ものを 作る ものを 自動で 売る
Slide 7
Slide 7 text
No content
Slide 8
Slide 8 text
No content
Slide 9
Slide 9 text
No content
Slide 10
Slide 10 text
No content
Slide 11
Slide 11 text
画像同期ツール
Slide 12
Slide 12 text
画像をモールに 登録するぞ 複数のネットショップを 運営するAさん
Slide 13
Slide 13 text
No content
Slide 14
Slide 14 text
No content
Slide 15
Slide 15 text
No content
Slide 16
Slide 16 text
リーダー メンバー
Slide 17
Slide 17 text
Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc.
Slide 18
Slide 18 text
Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc.
Slide 19
Slide 19 text
Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc. 2019年 7月 〜 2019年 10月
Slide 20
Slide 20 text
Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc. 2019年 10月 〜 現在
Slide 21
Slide 21 text
Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc. 2019年 10月 〜 現在 転職します
Slide 22
Slide 22 text
Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc. ここのタスクが山積み ↓
Slide 23
Slide 23 text
ドメイン層の設計って 何が正しいんだ…? タスクを消化したいけど どこに何を書くべきか迷う…
Slide 24
Slide 24 text
ドメイン層の設計って 何が正しいんだ…? タスクを消化したいけど どこに何を書くべきか迷う… 試行錯誤したことを話します
Slide 25
Slide 25 text
こんな疑問を解消したい ▷ なぜそのクラスにメソッドを持たすのか ▷ そもそもなぜそのクラスを作るのか ▷ どうしてインターフェースを作るのか 注意:レガシーコードにおいてです
Slide 26
Slide 26 text
No content
Slide 27
Slide 27 text
話したいこと ・木を見て森を見ず 細部を見ているあまり、 全体を見るのを忘れてしまうこと コンポーネントレベル の全体をみたお話をしたい
Slide 28
Slide 28 text
結論 ★ 処理の流れ ★ 依存関係 ★ 集約 画像同期の開発を例に やってよかったことを お話します
Slide 29
Slide 29 text
ネクストエンジンのコンテキスト
Slide 30
Slide 30 text
僕らが 作ったのは ここ
Slide 31
Slide 31 text
新機能開発 + リファクタリング
Slide 32
Slide 32 text
No content
Slide 33
Slide 33 text
やってよかった3つのこと ▷ JSにViewとPresenterの責務をも たせられたこと ▷ バリューオブジェクトを追加し て概念の統一 ▷ ドメインサービスの追加で 垂直分割
Slide 34
Slide 34 text
▷ JSにViewとPresenterの責務をも たせられたこと ▷ バリューオブジェクトを追加し て概念の統一 ▷ ドメインサービスの追加で 垂直分割 やってよかった3つのこと
Slide 35
Slide 35 text
No content
Slide 36
Slide 36 text
切り離し方式 ➢ ソースレベル ➢ デプロイレベル ➢ サービスレベル 結合度が低くなる
Slide 37
Slide 37 text
▷ JSにViewとPresenterの責務をも たせられたこと ▷ バリューオブジェクトを追加し て概念の統一 ▷ ドメインサービスの追加で 垂直分割 やってよかった3つのこと
Slide 38
Slide 38 text
既存機能ではユースケースごとに ロジックやデータ構造が異なっていた でも、どれもやっているのは画像登録
Slide 39
Slide 39 text
No content
Slide 40
Slide 40 text
▷ JSにViewとPresenterの責務をも たせられたこと ▷ バリューオブジェクトを追加し て概念の統一 ▷ ドメインサービスの追加で 垂直分割 やってよかった3つのこと
Slide 41
Slide 41 text
No content
Slide 42
Slide 42 text
No content
Slide 43
Slide 43 text
集約について ➢ 更新を行う単位 ➢ 外部から呼ばれるはじめの集約 を集約ルートと呼ぶ
Slide 44
Slide 44 text
ユースケースによって 集約ルートが変わるの だけどどうしよう...
Slide 45
Slide 45 text
注目
Slide 46
Slide 46 text
まとめ ★ 処理の流れ ★ 依存関係 ★ 集約 この3点が管理され ていれば改修時の ストレス、手戻りが かなり減ると感じた
Slide 47
Slide 47 text
今後について 1. レイヤ化アーキテクチャ 2. DIPの導入 3. マイクロサービス化 … 今ココ
Slide 48
Slide 48 text
今後について 1. レイヤ化アーキテクチャ 2. DIPの導入 3. マイクロサービス化 … 目指せマイクロサービス化! お話したことは DIP導入するための準備
Slide 49
Slide 49 text
入力から出力に向かっ て各レイヤが下方向に 依存している
Slide 50
Slide 50 text
依存先を具象から抽象へ Domainにインターフェースを 作り、Domainに依存するよう にする
Slide 51
Slide 51 text
Hameeにはエンジニアが のびのびと開発できる環境があります。 小田原に遊びに来てください。
Slide 52
Slide 52 text
No content