Upgrade to Pro — share decks privately, control downloads, hide ads and more …

実践オブジェクト指向設計 〜Javaで学ぶオブジェクト指向(応⽤)〜

Recruit
August 09, 2024

実践オブジェクト指向設計 〜Javaで学ぶオブジェクト指向(応⽤)〜

2024年度リクルート エンジニアコース新人研修の講義資料です

Recruit

August 09, 2024
Tweet

More Decks by Recruit

Other Decks in Technology

Transcript

  1. (C) Recruit Co.,Ltd. All rights reserved. 2 講師自己紹介 【名前】 藤本

    毅(フジモト タケシ) 【所属】 プロジェクト推進部 【経歴】 IT企業、常駐型開発会社、スタート アップ⽀援会社、通信キャリア等を 通してB2BからB2Cまで官公庁シス テムからチャットサービス、広告、 ⾳楽、エンタメ、旅⾏、⾦融、飲⾷、 HR等様々なシステムの開発に携わ る
  2. (C) Recruit Co.,Ltd. All rights reserved. 3 【⾔語・OS・フレームワーク等】 Mac, Linux(CentOS,

    Debian, Ubuntu, Kali, Raspberry Pi ), Windows C#、C、C++、Clojure、Ruby、Python、Ocaml、Haskell、PHP、Java、 Kotolin、Scala、Swift、Objective-C、JavaScript、CoffeeScript、 TypeScript、Go Ruby On Rails、CodeIgniter、Django、Spring、Laravel、 Playframework、sokko、 React、 Backbone.js、Vue.js、Unity、 Metasploit、Nessus、TensorFlow ..etc 【直近の活動】 Web(フロントエンド、バックエンド)、インフラ(オンプレミス・クラウド)、 サイバーセキュリティ、スマートフォン(iOS、Android、Tyzen)、電⼦回 路・FPGA、機械学習・ディープラーニング、3Dゲーム開発、OSやネットワー ク等の低レイヤー技術等、⻑年の試作やOSSの解析、業務経験等を通して得た 様々な知⾒や技術を活かし、それらを統合する研究を個⼈でおこなっている 講師自己紹介②
  3. (C) Recruit Co.,Ltd. All rights reserved. 4 当講座と『実践データベース設計』 の2講座を通しての⽬的 架空のECサイトR書店(仮)

    を題材にデー タベースからアプリケーションの設計・実装 までの広範なナレッジを体系的に整理しなが ら、実践的な内容を解説する
  4. (C) Recruit Co.,Ltd. All rights reserved. 14 M : モデル(Model)

    V : ビュー(View) C : コントローラ(Controller) MVCアーキテクチャ システムを以下の要素に分けたシステムのアーキテクチャ
  5. (C) Recruit Co.,Ltd. All rights reserved. 15 モデル(Model) ビジネスロジックやデータ処理を担当 ビュー(View)

    ユーザーに表⽰される画⾯やUIを担当 コントローラ(Controller) モデルとビューの間の橋渡し役 ※ViewやControllerはビジネスロジックを持たない
  6. (C) Recruit Co.,Ltd. All rights reserved. 17 MVCの提唱者 MVCはアラン・ケイと同じXEROX PARC(ゼロックス・

    パロアルト研究所)のトリグヴェ・リーンスカウク (Trygve Reenskaug)が1978-79年に提唱 引用元: https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%AA%E3%82%B0%E3%83%B4%E3%82%A7%E3%83%BB%E3%83%AA%E3%83%BC% E3%83%B3%E3%82%B9%E3%82%AB%E3%82%A6%E3%82%AF
  7. (C) Recruit Co.,Ltd. All rights reserved. 19 モデルの構成要素 データ ビジネスドメインに関連するデータ(複数ある場合はデータ間

    の”関連性”も含む) ビジネスロジック モデルが表現する概念を実現するためのビジネスルールや操作 を含む振る舞い
  8. (C) Recruit Co.,Ltd. All rights reserved. 21 リーンスカウクが提唱した当時の”モデ ル”と現在の”モデル” リーンスカウクがXerox

    PARCでMVCパターンを提 唱した際の「モデル」は、ビジネスロジックの点で 現代的な理解とは若⼲異なるニュアンスで使われて いた
  9. (C) Recruit Co.,Ltd. All rights reserved. 24 現代のシステム開発においては、プレゼンテーション層(画⾯) とデータアクセス層以外の全てのロジックをビジネスロジックに 該当するとみなすのが⼀般的

    ビジネスロジック(広義/現代解釈) アプリケーションに必要な機 能やビジネスプロセスを実 現するために必要なロジック (データの参照・生成・更新・ バリデーション、演算・判 定...etc) プレゼンテーション層 (ControllerやView) アプリケーション層 (ServiceやModel等を含む) データアクセス層
  10. (C) Recruit Co.,Ltd. All rights reserved. 26 データモデル データとその関連に焦点を合わせて、主にデータベースのレ コードを表現した(ソフトウェアの設計をデータベースの構

    造に合わせた)モデル ドメインモデル (狭義の)ビジネスロジックに焦点を合わせたモデル リーンスカウクが提唱した当初のモデルに近い
  11. (C) Recruit Co.,Ltd. All rights reserved. 27 ビジネスの問題領域の複雑性を抽象化して表現 ドメインモデル プレゼンテーション層

    アプリケーション層 データアクセス層 ドメイン層 ドメインモデル エンティティ 集約 値オブジェクト
  12. (C) Recruit Co.,Ltd. All rights reserved. 28 データベースの構造を表現 プレゼンテーション層 アプリケーション層

    データアクセス層 データモデル エンティティ / DTO等※ ※データモデルのエンティティ とドメインモデルのエンティティ とは同一の概念ではないので 注意。またDTOは厳密にはモ デルではないが、事実上モデ ルとして使用されることがある データモデル
  13. (C) Recruit Co.,Ltd. All rights reserved. 32 補⾜︓ユースケースとドメインの違い ユースケースは、 「システムがどのように使⽤さ

    れるのか」に焦点を当て、ユーザから⾒たシステ ムの具体的な機能を表現したもの ⼀⽅、ドメインはユースケースを実現するために 「システムが何を解決しようとしているか」に焦 点を当てたもの
  14. (C) Recruit Co.,Ltd. All rights reserved. 33 ECサイトにおける「注⽂」︓ユースケース観点 ユースケースは、ユーザー(この場合はECサイトの顧客)がシステムを通 じて⽬標を達成するための⼀連のアクションを定義する。具体的な「注⽂

    する」までのユースケースを簡略化すると以下のようになる 1. 顧客がログインする 2. 商品を検索する 3. 商品をカートに追加する 4. カートを確認し、チェックアウトする 5. 配送先住所を⼊⼒したり、⽀払い⽅法を選択し、注⽂を確定する 6. 注⽂確認と完了の通知を受け取る このようにユースケースは、ユーザーのインタラクションのフローを詳細 に説明し、システムが提供すべきインターフェイスと機能を明らかにする
  15. (C) Recruit Co.,Ltd. All rights reserved. 34 ECサイトにおける「注⽂」︓ドメイン観点 ドメインモデルを作成し、注⽂プロセスに関連するビジネスの概念やルー ルを体系的に表現する

    以下は「注⽂する」プロセスに関連するドメインに紐づく要素の⼀部を⽰す エンティティ(ドメインモデル) 顧客: ⽒名、連絡先情報、認証情報等と関連する振る舞いを持つ 注⽂: 注⽂⽇時、ステータス、顧客情報、注⽂明細等と関連する振る舞いを持つ 商品: 商品名、価格等と関連する振る舞いを持つ 値オブジェクト(ドメインモデル) ⾦額: 通貨や数値等を持つ リポジトリ 注⽂リポジトリ: 注⽂情報を永続化する アプリケーションサービス 注⽂処理サービス: 注⽂を受け付け、ドメインモデルを⽤いて在庫を更新したり、 ⽀払いを処理する(プロセス全体のオーケストレーションを担う)
  16. (C) Recruit Co.,Ltd. All rights reserved. 39 トランザクションスクリプトとロジックの重複 データモデル中⼼設計(トランザクションスクリプト)は、ユー スケース別に設計されるため、複数のユースケースの間でロジッ

    クが重複しても気づかず、同じようなロジックが分散しやすいと いう問題がある ⼀⽅、ドメインモデルでは、ドメインオブジェクトごとに振る舞 いが割り当て、何か新しい振る舞いを追加するときは、既存のメ ソッドを調べたうえで、無かったら追加していくため、重複がお きにくいという利点がある
  17. (C) Recruit Co.,Ltd. All rights reserved. 40 データモデル中⼼の設計 シンプルで学習コストは低いが、設計や実装 が崩れやすい(⻑期スパンで負債になりやす

    い) ドメインモデル中⼼の設計 学習コストは⾼いが、コードの可読性や変更 容易性が向上し、設計が安定する
  18. (C) Recruit Co.,Ltd. All rights reserved. 51 『プリンシプル オブ プログラミング』

    3年⽬までに⾝につけたい ⼀⽣役⽴つ101の原理原則 コードベースではないものの、コーディング や設計に必要な考え⽅がまとめられた良書 引用元:hYps://m.media-amazon.com/images/I/61IQxm626YL._SL1500_.jpg
  19. (C) Recruit Co.,Ltd. All rights reserved. 52 『現場で役⽴つシステム設計の原則』 従来のドメイン駆動設計を咀嚼する形で、ドメインモデルを⽤ いた設計について、Webシステムの基礎から触れている良書だ

    が、エリック・エヴァンスのドメイン駆動設計とやや異なる点 があるので注意 引用元:https://m.media-amazon.com/images/I/816kPT38qiL._SL1500_.jpg
  20. (C) Recruit Co.,Ltd. All rights reserved. 54 Effective Java 第3版

    やや⽂章にクセがありますが、中級以上 のJavaエンジニアは必読の良書 引用元:https://m.media-amazon.com/images/I/71QGo2A2p2L._SL1500_.jpg
  21. (C) Recruit Co.,Ltd. All rights reserved. 56 当講義の関連リポジトリ(GHE) 架空のECサイトR書店 ※準備中

    rbooks (https://ghe.misosiru.io/takeshi-fujimoto/rbooks) rbooks-ddd (https://ghe.misosiru.io/takeshi-fujimoto/rbooks-ddd)
  22. (C) Recruit Co.,Ltd. All rights reserved. 57 推奨リポジトリ(GitHub) IDDD_Samples(https://github.com/VaughnVernon/IDDD_S amples)

    『実践ドメイン駆動設計』のリポジトリ dddsample-core(https://github.com/citerus/dddsample- core) DDDの⽣みの親であるEric Evansの会社Domain Language とスウェーデンの Citerusという会社の共同作業で進められているプロジェクト