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