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