クリーンな実装を目指して.pdf

Fe23744cb5f09fa7307084db41c785b4?s=47 syarig
February 11, 2020
880

 クリーンな実装を目指して.pdf

Fe23744cb5f09fa7307084db41c785b4?s=128

syarig

February 11, 2020
Tweet

Transcript

  1. クリーンな実装を目指して Hamee株式会社 開発部 伊藤有人 開発部 能美龍星

  2. Hamee開発部 伊藤 有人 (Arito Ito) 新卒2年目Webエンジニア
 画像管理チーム
 1年目はアプリ開発
 @syarig6

  3. Hamee開発部 能美 龍星 (とんと) 新卒2年目Webエンジニア
 1年目はQAエンジニア
 仕事はバックエンド多め
 プライベートはフロント
 @27ma4_ton10

  4. None
  5. 小田原でネットショップの運営と ECの業務を自動化する企業

  6. Hameeには二つの軸があります ものを 作る ものを 自動で 売る

  7. None
  8. None
  9. None
  10. None
  11. 画像同期ツール

  12. 画像をモールに
 登録するぞ
 複数のネットショップを 運営するAさん

  13. None
  14. None
  15. None
  16. リーダー メンバー

  17. Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc.

  18. Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc.

  19. Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc. 2019年 7月  〜 2019年 10月

  20. Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc. 2019年 10月 〜 現在

  21. Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc. 2019年 10月 〜 現在 転職します


  22. Server ・バッチの実行 ・DBとのやり取り ・キューの作成 etc. ここのタスクが山積み ↓

  23. ドメイン層の設計って 何が正しいんだ…? タスクを消化したいけど どこに何を書くべきか迷う…

  24. ドメイン層の設計って 何が正しいんだ…? タスクを消化したいけど どこに何を書くべきか迷う… 試行錯誤したことを話します

  25. こんな疑問を解消したい ▷ なぜそのクラスにメソッドを持たすのか ▷ そもそもなぜそのクラスを作るのか ▷ どうしてインターフェースを作るのか 注意:レガシーコードにおいてです

  26. None
  27. 話したいこと ・木を見て森を見ず 細部を見ているあまり、 全体を見るのを忘れてしまうこと コンポーネントレベル の全体をみたお話をしたい

  28. 結論 ★ 処理の流れ ★ 依存関係 ★ 集約 画像同期の開発を例に やってよかったことを お話します

  29. ネクストエンジンのコンテキスト

  30. 僕らが 作ったのは ここ

  31. 新機能開発 + リファクタリング

  32. None
  33. やってよかった3つのこと ▷ JSにViewとPresenterの責務をも たせられたこと ▷ バリューオブジェクトを追加し て概念の統一 ▷ ドメインサービスの追加で 垂直分割

  34. ▷ JSにViewとPresenterの責務をも たせられたこと ▷ バリューオブジェクトを追加し て概念の統一 ▷ ドメインサービスの追加で 垂直分割 やってよかった3つのこと

  35. None
  36. 切り離し方式 ➢ ソースレベル ➢ デプロイレベル ➢ サービスレベル 結合度が低くなる

  37. ▷ JSにViewとPresenterの責務をも たせられたこと ▷ バリューオブジェクトを追加し て概念の統一 ▷ ドメインサービスの追加で 垂直分割 やってよかった3つのこと

  38. 既存機能ではユースケースごとに ロジックやデータ構造が異なっていた でも、どれもやっているのは画像登録

  39. None
  40. ▷ JSにViewとPresenterの責務をも たせられたこと ▷ バリューオブジェクトを追加し て概念の統一 ▷ ドメインサービスの追加で 垂直分割 やってよかった3つのこと

  41. None
  42. None
  43. 集約について ➢ 更新を行う単位 ➢ 外部から呼ばれるはじめの集約 を集約ルートと呼ぶ

  44. ユースケースによって 集約ルートが変わるの だけどどうしよう...

  45. 注目

  46. まとめ ★ 処理の流れ ★ 依存関係 ★ 集約 この3点が管理され ていれば改修時の ストレス、手戻りが

    かなり減ると感じた
  47. 今後について 1. レイヤ化アーキテクチャ 2. DIPの導入 3. マイクロサービス化 … 今ココ

  48. 今後について 1. レイヤ化アーキテクチャ 2. DIPの導入 3. マイクロサービス化 … 目指せマイクロサービス化! お話したことは

    DIP導入するための準備
  49. 入力から出力に向かっ て各レイヤが下方向に 依存している

  50. 依存先を具象から抽象へ Domainにインターフェースを 作り、Domainに依存するよう にする

  51. Hameeにはエンジニアが のびのびと開発できる環境があります。 小田原に遊びに来てください。

  52. None