Successfully reported this slideshow.
Your SlideShare is downloading. ×

ドメイン駆動設計と サーバサイドと私

More Related Content

Slideshows for you

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

ドメイン駆動設計と サーバサイドと私

  1. 1. ドメイン駆動設計と サーバサイドと私 株式会社 CyberZ 門田矩明 新卒向け勉強会(2016/04/20)
  2. 2. 自己紹介 ・門田 矩明(かどた のりあき) ・株式会社CyberZ F.O.X プロダクトマネージャ ・Javaエンジニア。個人的にフレームワークはSpring Boot推し ・前職では、ECサイト開発やFX取引システム開発など ・2012年 サイバーエージェント 中途入社 [Ameba] 出会い系アプリ → Teen女子SNSアプリ → Teen女子ブログサービス(CANDY by Ameba) [CyberZ] F.O.X 広告効果計測システム開発リーダー → F.O.X プロダクトマネージャ now
  3. 3. 私がサーバサイドで一貫して 使用しているもの
  4. 4. ドメイン駆動設計 Domain Driven Design
  5. 5. [今日のゴール] ドメイン駆動設計に 興味をもってもらう
  6. 6. Q. ドメイン駆動設計ってなに?
  7. 7. Q. ドメイン駆動設計ってなに? A. ドメインモデルを中心においた ソフトウェアの設計/実装手法
  8. 8. Q. ドメインモデルってなに?
  9. 9. Q. ドメインモデルってなに? A. ドメイン(特定のビジネス領域)に おける知識をモデル化したもの
  10. 10. Q. ドメインモデルってなに?別解 A. オブジェクト指向に則って切り出 した、属性と振る舞いを持つ オブジェクト
  11. 11. Q. どれがドメインモデル?
  12. 12. Q. どれがドメインモデル? A. RPGだと、プレイヤー、モンスタ ー、アイテム、装備(状態)、呪文、 フィールド
  13. 13. Q. どれがドメインモデル?別解 A. 出会い系だと、ユーザ、仮想通貨、 メッセージ、残高、入出金、ブロッ ク、身分証明
  14. 14. 少し戻って
  15. 15. Q. ドメインモデルってなに? A. ドメイン(特定のビジネス領域)に おける知識をモデル化したもの
  16. 16. ドメインモデルは、 技術的な内容に特化していないため 非エンジニアを含む全関係者で 共通言語として使用出来る
  17. 17. 共通言語が無いと コミュニケーションミス 知識の分散化 設計と実装の乖離
  18. 18. 共通言語は大事
  19. 19. ここまでは設計の話
  20. 20. ここからは実装の話
  21. 21. ドメイン駆動設計においての実装
  22. 22. アーキテクチャ
  23. 23. DDDにおけるレイヤーアーキテクチャ ドメインモデルをUIや永続化といったロジックから分離し、 ドメインロジックのみを純粋に表現できる状態に保つことが目的 ユーザインターフェース層 ユーザに対して情報を表示し、ユーザの命令 を解釈 アプリケーション層 ドメインモデルを組み合わせ協調させるため の処理を行う薄いレイヤ。ビジネスロジック を含まない。 ドメイン層 ドメインモデルなど、ドメインについての情 報を含むレイヤ。 インフラストラクチャ層 ドメインモデルの永続化を担当。DBとかKVS とかを抽象的に表現。
  24. 24. ただ、レイヤードはもう古い
  25. 25. 最新DDDアーキテクチャとAkkaでの実装ヒントについて by じゅんいち☆かとう
  26. 26. DDD + Clean Architecture + UCDOM Full版 by Yoshitaka Okuda
  27. 27. モデルの種類+α
  28. 28. DDDにおけるモデル+α エンティティ 永続化するもの。IDなどでユニークに管理。 バリューオブジェクト(VO) 永続化しないもの。一過性である場合が多く、 IDなどで管理されない。 サービス エンティティでもバリューオブジェクトでも 表現できないロジックの集約先 リポジトリ 永続化へのインターフェースを提供する。エ ンティティに対する永続化インターフェース のため、永続方法は問わない。
  29. 29. アグリゲート、ファクトリ、モジュ ール、他にも色々
  30. 30. ドメインモデル貧血症
  31. 31. ドメインモデル貧血症とは 全てのドメインロジックが、 本来あるべきドメインモデルから 外に漏れでてしまっている状態
  32. 32. ドメインモデル貧血症とは(別解 エンティティには属性しかなく、 肝心のドメインロジックは全て サービスなどに手続き的に記述され ている状態
  33. 33. ドメインモデル貧血症が起こす弊害 [ゴッドクラス] 大量のメソッドを保有する万能クラ ス。IDEが死ぬ [ゴッドメソッド] 大量の引数を持ち、指定されるデー タのパターンによって振る舞いがか わる万能メソッド。改修時に死ぬ
  34. 34. ドメインモデル貧血症は ソフトウェア開発でよく見る光景 変更があった際に影響が出やすい
  35. 35. ドメイン駆動設計では ドメインモデル貧血症を防ぎ ドメインモデルを設計と同じ状態で コード上でも表現することを目的と している
  36. 36. 共通言語で統一 知識をモデルに集約 設計と実装を同じ状態で表現
  37. 37. 共通言語で統一 知識をモデルに集約 設計と実装を同じ状態で表現 ビジネスに変更があった場合に強い
  38. 38. 最初に戻って
  39. 39. Q. ドメイン駆動設計ってなに? A. ドメインモデルを中心においた ソフトウェアの設計/実装手法
  40. 40. Q. ドメイン駆動設計を採用する理由
  41. 41. Q. ドメイン駆動設計を採用する理由 A.ビジネスの変化にも耐えられる ソフトウェア構造を表現できるから
  42. 42. [今日のゴール] ドメイン駆動設計に 興味をもってもらう
  43. 43. 興味出た人は、 DDDで検索すると良いです

×