Slide 1

Slide 1 text

(フロントはReactで実装) 2021年11月24日 オブジェクト指向LT会 vol.3 畠山 忠修

Slide 2

Slide 2 text

 氏名:畠山 忠修  属性:WEB系エンジニア  業務系、組み込み系、スマートフォンアプリ開発、 WEB系の開発経験あり  C言語系の言語が好み  VB.NET、 C、C++、C#、Java、Kotlin、Swift、PHP、 JS(jQuery、AngularJS、Vue.js)等々の開発経験あ り  バックエンド寄り。フロントエンド、インフラもやりま す。

Slide 3

Slide 3 text

【1】 • 検証内容と目的 【2】 • 実装するECサイトの機能 【3】 • 設計 【4】 • 自動テスト 【5】 • 検証結果発表 【6】 • まとめ 【7】 • おまけ

Slide 4

Slide 4 text

 検証内容  同じ実装をMVCとドメイン駆動設計(以降DDD)で実 装  クリーンアーキテクチャ採用  DDD、軽量DDD、MVCの3パターンで検証  検証目的  DDDの見識を深める  MVC、DDDを様々な観点で比較  検証結果を今後の開発に役立てる

Slide 5

Slide 5 text

 機能  商品一覧  商品詳細  カート  注文  フロントエンド  Reactを採用  Material UIでリッチなUIを実現  レスポンシブにも対応

Slide 6

Slide 6 text

 クラス図  原則クリーンアーキテクチャと同じクラス構成に  Laravelの都合で一部妥協

Slide 7

Slide 7 text

 シーケンス図

Slide 8

Slide 8 text

 集約  集約ルートから操作するよう実装

Slide 9

Slide 9 text

 ドメインサービス  カート追加は複数Entityを操作する  ProductRepositoryからProduct Entity取得  CartItem Entity生成  CartItem EntityへProduct Entityをセット  上記一連の操作もドメイン知識と言える  ユースケースではなく、ドメインサービスへ実装す るのが望ましいと判断  ドメイン貧血症に要注意

Slide 10

Slide 10 text

 バリーデーションチェック  Value Obujectのコンストラクタへバリデーション チェックを実装  Value Obujectをnewする度にtry catchするのは 冗長・・・  try catch無しでは複数入力エラーがあっても1つ ずつしか画面表示できない  ModelFactoryというドメインサービスで解決

Slide 11

Slide 11 text

 TDDで実装  ユースケース単位でUnitTestを実装  リファクタリングで効力発揮  リファクタリングでオールNG(レッド)に  オールOK(グリーン)になるまで修正  画面が動くことを確認  TDDは品質担保に有用な事を立証

Slide 12

Slide 12 text

 ファイル数・ステップ数  DDD>軽量DDD>MVC(予想通り) 種別 ファイル数 ステップ数 DDD 152 3,444 軽量DDD 102 2,298 MVC 23 725

Slide 13

Slide 13 text

 パフォーマンス  7つの処理の平均値で比較  DDDは少し結果が悪いが、軽量DDD、MVCはほぼ同 等  DDDのデータ詰め替えコストで、大量データ取得時の み若干悪影響が出る模様(許容範囲内) 種別 速度(平均) 使用メモリ(平均) DDD 121ms 1437KB 軽量DDD 74ms 1199KB MVC 65ms 1096KB

Slide 14

Slide 14 text

 メリット・デメリット 種別 メリット デメリット DDD ・疎結合・高凝集でメンテナンス性 が高い ・疎結合でUnitTestを実装しやす い ・ファイル数・ステップ数が多くなる ・データの詰め替えコストがかかる 軽量DDD ・DDDのメリットを継承 ・DDDと比べてファイル数・ステップ プ数は少ない ・DDDと比べてデータ詰め替えコス ストは低い ・ファイル数・ステップ数はMVCの3 3倍以上 ・データ詰め替えコストは0にはな らない MVC ・ファイル数・ステップ数が圧倒的 に少ない ・データ詰め替えコストがない ・蜜結合・低凝集でメンテナンス性 が低い ・UnitTestが実装しにくい ・重複コードが発生しやすい

Slide 15

Slide 15 text

 DDDか軽量DDDなら、軽量DDDの方が良さそ う  1年未満の運用・低工数で実現したいWEBシ ステム → MVCが最適  1年以上の運用を想定したWEBシステム → 軽量DDDが最適

Slide 16

Slide 16 text

 エヴァンス本とは  書籍「エリック・エヴァンスのドメイン駆動設計」  本検証をQiitaで公開中  https://qiita.com/take-t14/items/71398530e451dcd0c183  本検証のソースコードをGithubで公開中  PHP版・・・ https://github.com/take-t14/laravel-ddd-sample  Ruby版・・・ https://github.com/take-t14/rails-react-sample