ken1flanのブログ

自己紹介・最近やってることなどを書くつもりです。

良いコード/悪いコードで学ぶ設計入門 5章のメモ

gihyo.jp

良いコード/悪いコードで学ぶ設計入門読書メモです。

長いので章ごとにしてます。

5 低凝集 ―バラバラになったモノたち―

5.1 staticメソッドの誤用

  • あー…こりゃ書いちゃいそう…。

5.1.1 staticメソッドはインスタンス変数を変えない

5.1.2 インスタンス変数を使う構造につくり変える

5.1.3 インスタンスメソッドのフリしたstaticメソッドに注意

  • こらー!って感じですね><
    • RubyだとRubocopが指摘してくれます。
  • staticをつけても動くのか?その確認方法、いいですねw

5.1.4 どうしてstaticメソッドが使われてしまうのか

  • 手続き型…なるほど。
  • サンプルはタダの足し算でしたが…もっと複雑な「手続き」があるときにこそ現れそう。

5.1.5 どういうときにstaticメソッドを使えばいいのか

  • わかる気がします。

5.2 初期化ロジックの分散

  • まぁまぁいいんじゃないの?と確かに思いました。

5.2.1 privateコンストラクタ+ファクトリメソッドで目的別初期化

  • これはなるほどです。あちこちでやってしまいそう。
    • Railsで同じモデルを扱うけど、場面で変更する内容を制御したいときに使っているフォームオブジェクトも同じような気持ちかも。
  • 用途別のファクトリーメソッドは確かに有効かも。
    • でもなぁ…用途別のページなりなんなりに処理が書いてあるなら…それはそれで悩みはない気もしますが…どうだろう🤔
    • Railsだとモデルはそこまで強制しないので、Railsでやってるなら、そこまでしなくてもいいような気がします。

5.2.2 生成ロジックが増え過ぎたらファクトリクラスを検討すること

  • 増えすぎて見通しが悪くなったら…。せやなあ。

5.3 共通処理クラス(Common・Util)

5.3.1 さまざまなロジックが雑多に置かれがち

  • 実によく見ます…。
    • 今うちにもありますし。

5.3.2 オブジェクト指向設計の基本に立ち返ろう

  • 中をちゃんと読み直せば、本来置くべきところがみつかることも多そう。

5.3.3 横断的関心事

  • 🦀
  • 他、なにか思いつかないかな…?

5.4 結果を返すために引数を使わないこと

  • この本、ゲームプログラミングをやってるとわかりみがあるのかな…?
  • 5.16のコードだと…意図が読み取れない><
    • そこはsetというメソッド名がそもそも問題ありそう…。
  • ここのサンプルコード、あー書いちゃいそう感がないので、実感が…

Column C#のoutキーワード

  • 5.20「完全回復」魔法の実装、こんなふうには書かないような…。
    • 渡すなら引数は魔法の対象者の「キャラクター」じゃないかな?
    • ヒットポイント・マジックポイントの最大値、絶対わかんないじゃん?
  • 5.21 なら確かによさそうです。

5.5 多すぎる引数

  • 5.23…なりがちかなぁ…こんなふうに書きたくなる気持ちが想像つかない…。
    • あやうい実装だという説には同意しますけども…。
    • でも…わざわざ書くということは、やっぱり見かけるってことですよね…。

5.5.1 プリミティブ型執着

5.5.2 意味のある単位ごとにクラス化する

  • 魔法力…数値っぽいので、回復/消費はオペレータが使えるとうれしい気がする…。
  • 意味のある単位でクラス化は同意…!

5.6 メソッドチェイン

  • デメテルの法則…。あんまり深くのものを直接扱うな…はわかる…。

5.6.1 尋ねるな、命じろ