オブジェクト指向設計実践ガイド 四章まで読んで気になったこと
序盤の章は具体的に自分のコードにしてみました。
メソッドの責任の分割
メソッドの責任を分割してみました。
自分より変更されないものに依存しなさい
引数の依存を避けるためにキーワード引数を導入してみました。
これで別の場所でインスタンスを作る際にクラスがどの順番で処理しているかを考える必要がなくなります。
もちろん世の中これがデファクトではなくていくつかの順番に依存する引数と残りをオプションハッシュにしているメソッドが多いですね。
オブジェクトは相手を信頼して隣人にしか声をかけない
Player
がHardware
を使ってSoftware
をプレイしようとしてもPlayerはSoftwareに直接メッセージを送るのは避けるべきで、PlayerはHardwareを信用して、遊びたい中身はSoftwareだとしてもPlayerにはplayというパブリックインターフェイスをもたせて詳細な実装は隠すべき
こうするとplayするゲームがVRになってplay以外のことをHardwareとSoftwareを使ってするようになっても、player.experience等一般化して対応できるようになる。
player.hardware.software.run #ではなく player.play #とするべき
オブジェクト指向とは
オブジェクト指向ってなんだ(困惑)。
単一責任とか疎結合とかパブリックインターフェイスとか他のオブジェクトを信頼はしても依存はしないのが良いということはわかりました。人間関係かな。
StackEditで簡単にシーケンス図がかけるので最高