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

オブジェクト指向×思考×試行 / OOP x Study x Try

オブジェクト指向×思考×試行 / OOP x Study x Try

ホスtechMTG#7 発表資料

オブジェクト指向設計実践ガイド
~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方
http://gihyo.jp/book/2016/978-4-7741-8361-9

litencatt

March 12, 2018
Tweet

More Decks by litencatt

Other Decks in Programming

Transcript

  1. 最近やっていること インフラ業 おさいぽ! への WAF (W eb A pp licat

    ion F ierw all)導入 おさいぽ! の API サー バの移設 開発業 ムー ムー ドメインのカー ト統合へ向けた開発 WP ホスティングオプションの更新バッチ開発 運用業 毎月の売上差異調査の自動化へ向けた取り組み 3
  2. オブジェクト指向とは? スティー ブ・ ジョブズいわく もし僕が君の洗濯屋(lau ndry)オブジェクトだとすると、 君は僕に 汚れ物を渡し、「 服を洗濯してくれ」 とメッセー

    ジを送ることがで きる。 たまたまサンフランシスコで一番いいクリー ニング屋がどこ かを僕は知っている …(中略) きれいになった服を君に渡して「 こちらが洗濯済みの服です」 と僕 は言う。 どうやって僕が洗濯したかは君はわからない。… 引用元: https://y akst.com/ja/p osts/3420 7
  3. オブジェクト指向との出会い 僕がオブジェクト指向と出会うきっかけ R uby & R ails R u by

    はオブジェクト指向言語 ムー ムー ドメインの開発言語/フレー ムワー クとして採用されている つまりオブジェクト指向を学ぶ上でベストな環境 ( 大学時代に J av aを習った記憶はノー カウントとする ) 9
  4. オブジェクト指向との出会い まだ僕が手続き型少年ボウイだった頃の話 ムー ムー での開発で R ails の開発をやりはじめた頃 C ontr

    oller 内に必要な処理全部書いちゃう少年ボウイだった 思いっきり R ailから外れた行為 10
  5. オブジェクト指向との出会い そんな感じだったので… チー ムのコー ドレビュー にて 僕より OOP (O bject

    O r ient ed P eop le)なチー ムメンバー たち コー ドレレビュー でいろいろ設計のアドバイスもらった R ails における適切な設計とは? モデルなどへ適切に処理(ビジネスロジック)を分離させること つまりオブジェクト指向な考え方 => オブジェクト指向の重要性・ 必要性に気づいた 11
  6. オブジェクト思考(S tudy) オブジェクト指向設計を学ぶためにやったこと オブジェクト指向設計実践ガイド S andi M etz 氏による R

    u by によるオブジェクト指向設計指南書 オブジェクト指向による設計について基礎から学べる 本書の例に自転車のパー ツや種類が多数出てくることでも有名? 14
  7. オブジェクト指向設計実践ガイド 例) 自転車旅行会社 旅行者(C ust omer)に対して最適な自転車旅行(T r ip と B

    icy cle)を提供する 登場人物(クラスになりそうなものたち) 参加者 (C ust omer) 旅行 (T r ip) 自転車 (B icy cle) 工程 (R out e) 整備士 (M echanic) 16
  8. 最初の段階の設計(シー ケンス図1)をみると C ust omer がsu it able_tr ips メッセー

    ジを T r ip に対して送っている このままでも目的であった最適な旅行を見つけられるかも知れない シー ケンス図1 19
  9. オブジェクト指向設計的考え方 適切な責任を請け負うのは誰か? オブジェクトではなく送るメッセー ジに目を向ける su it able_tr ips を受け取るべき相手は誰が適切なのか? C

    ust omer が欲しいのはいい感じの旅行一覧 シー ケンス図1では C ust omer がいろいろ知りすぎてるし、 やりすぎ ている 20
  10. シー ケンス図2 おそらく T r ipF ider クラスがsu it able_st

    eps を受け取るべき T r ipF inder は C ust omer の代わりに T r ip や B icy cleとやり取りをして結 果を C ust omer に返してくれる シー ケンス図2 21
  11. オブジェクト試行(T ry1) ムー ムー は決済フロー をカー ト化しようとしていた ドメインを一度に複数購入できるようにしたい 新たな購入フロー を

    R ails で設計・ 構築しようとしていた そこでオブジェクト指向的考えをもとに購入処理や決済処理をそれ ぞれmodu le化した 24
  12. 購入処理や決済処理をそれぞれmodule化した 何が嬉しいのか? R u by の場合多重継承がない class にmodu leをmix‑inして使う modu

    le化 = 着脱可能なユニット化であり、 使いたいclass 内で inclu deすれば使用可能なコー ドになった カー ト以外にも使い回すことができる 25
  13. ムー ムー は決済フロー をカー ト化しようとしていた 登場人物 U s er :

    ユー ザー C art : カー トモデルオブジェクト O r der able : ドメインやオプションの注文処理を扱う P ay ment able : 決済処理を扱う 26
  14. WP ホスティングオプションの更新バッチ開発 更新バッチでやりたいことは、 昨日契約が終了した WP ホスティングオプションが入ったカー トデー タ を作り、 そのカー

    トの更新処理を実行する 登場人物 B at ch : 更新バッチ O pt ion : オプションモデル C art : カー トモデルオブジェクト O r der able : ドメインやオプションの注文処理を扱う P ay ment able : 決済処理を扱う 29
  15. WP ホスティングオプションの更新バッチ開発 オブジェクト指向的考え方 B at chが送るメッセー ジ O pt ionへ契約終了したオプションを要求

    C art へカー ト作成依頼 C art へカー トの決済依頼 それぞれが役割をいい感じにやってくれている 31