雑談

はじめまして。22Inc.にエンジニアとして中途入社しました藤原です。 実は、昔に営業代理店で「スタンプス」を販売していた経験があります。 そんな私が偶然、縁があり22incにエンジニアとして拾っていただきました。 さて、夏休みの読書感想文を書いていきたいと思います。 読んだ本: オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方作者: Sandi Metz,?山泰基出版社/メーカー: 技術評論社発売日: 2016/09/02メディア: 大型本この商品を含むブログ (6件) を見る 本を読む前まで ダックタイピングってなに? もしもそれがアヒルのように歩き、アヒルのように鳴くのなら、それはアヒルである。 へ〜よくわからんけど、まだ自分には早い技術やな。 オブジェクト指向ってなに? クラスがあるやつやろ? 継承ってのが便利みたい。 インスタンスがつくれる(クラスは設計書みたいな感じ) 恥ずかしながらそんなレベルでした。 では、オブジェクト指向を少し身に着けた軌跡をまとめていきます。 オブジェクト指向のオブジェクトの考え方 オブジェクト指向とそうでないコードの対比 オブジェクト指向でないコード オブジェクト指向なコード オブジェクト指向ならどういうメリットがあるのか オブジェクト指向でないコード オブジェクト指向なコード つまり 感想 オブジェクト指向のオブジェクトの考え方 感動した言葉があったので引用 仮にオブジェクトが人間だとして、自分の関係を説明できるとしましょう。すると、図4.5では、TripはMechanicに「私は自分が何を望んでいるかを知っているし、あなたがそれをどうやるかも知っているのよ」と伝えているはずせす。図4.6では、「私は自分がなにを望んでいるかを知っていて、あなたが何をするのかも知っているよ」、図4.7では、「私は自分が何を望んでいるかを知っているし、あなたがあなたの担当部分をやってくれると信じているよ」でしょう オブジェクト指向とそうでないコードの対比 では、具体的にオブジェクト指向なコードとそうでないコードのを比較してみます。 本書にでてくる4章のシーケンス図の例を参考にしながらRailsで自分なりにコードにしてみました。 自転車旅行会社で、旅行の前に整備士が自転車の準備をするプログラム オブジェクト指向でないコード Tripクラスのprepare_bicyclesメソッドは、Mechanicクラスをメソッド内で使っており、かつMechanicクラスのメソッドの引数にどのようなデータを渡すかまで知っておりそれも、使っている。 つまり、「私は自分が何を望んでいるかを知っているし、あなたがそれをどうやるかも知っているのよ」という状況 class Trip < ApplicationRecord has_many :trips def prepare_bicycles self.bicycles.each do |bicycle| Mechanic.clean_bicycle(bicycle) Mechanic.pump_tires(bicycle) Mechanic.lube_chain(bicycle) Mechanic.check_brakes(bicycle) end end end class Bicycle < ApplicationRecord belongs_to :trip, optional: true end class Mechanic < ApplicationRecord def self.clean_bicycle(bicycle) bicycle.update(is_clean: true) end def self.pump_tires(bicycle) bicycle.update(is_pump_tires: true) end def self.lube_chain(bicycle) bicycle.update(is_lube_chain: true) end def self.check_brakes(bicycle) bicycle.update(is_check_brakes: true) end end trip = Trip.find(1) trip.prepare_bicycles オブジェクト指向なコード Tripクラスの内には、MechanicクラスがなくMechanicに関することを何も知らない。Mechanicクラスのprepare_trip(trip)メソッドで引数としてオブジェクトが注入され、アソシエーションのbicyclesメソッドが呼び出される。Mechanicクラスに引数として渡り、どのように処理されるかはMechanicクラスに任せている。 つまり、「私は自分が何を望んでいるかを知っているし、あなたがあなたの担当部分をやってくれると信じているよ」という状況 class Trip < ApplicationRecord has_many :bicycles end class Bicycle < ApplicationRecord belongs_to :trip, optional:...