🍪
カプセル化について考えた話【良いコード/悪いコードで学ぶ設計入門】
良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方 のカプセル化の部分を読んで、実際のコードを見ながら問題点を探すワークショップをしました。なんとなくカプセル化について理解していても、意外と実際のコードを見ながらだと、どこがカプセル化されてなくて、どういう問題があるかわからなかったです、、。ワークショップを通して、なんとなく自分が理解したことを吐き出しておきます。(自信ない)
カプセル化とは??
データとロジックを一つのクラスに閉じ込めて、クラス単体で責務を果たせるようにすること!
データとロジックがバラバラだと、どのデータでどのロジックを実行するのが正しい状態なのかが、わからない(実装者だけわかる)ので、間違った使い方をしてしまう可能性があります。間違った使われ方をしてしまうと、今後の変更時に思わぬ影響が発生して、変更が難しくなりそうです!
クッキー作りにハマっているので、お菓子作りで例えてみた、、↓↓
# お砂糖クラス(データだけのクラス)
class Suger
amount
end
# クッキー作成ロジック(料理つくるロジックが集まってるだけのクラス)
class Cooking
static make_cookie(suger,butter,...)
static make_cake(...)
static make_teriyaki(...)
end
# 変に使われる、、
suger = Suger.new(50);
Cooking.make_teriyaki(suger..) # 料理用の白砂糖と製菓用の粉砂糖ってちがうのに
suger = Suger.new(100000)
Cooking.make_cookie(suger...) # 砂糖いれすぎ〜〜
# クッキークラスにカプセル化したらいいんじゃない??
class Cookie
suger
butter
...
bake()
end
カプセル化されてないクラスの見つけ方
たしかに〜と思った見つけ方。自分的にはわかりやすかった。
- クラスにメソッドが少なすぎる
-> ただのデータクラスになっていないかい?ロジックがどっかに漏れ出てないかい? - クラスにメソッドが多すぎる
-> 自分の責務外のロジックまで請け負っていないかい?
問題点の見つけ方
多分こんな感じ。もっといろんな視点はあると思うけど、考えやすかった。
- 今後変更する時を考える
-> その時の影響範囲は?自分のクラス外に及ばないかな?? - 初めてコード見た時を考える
-> 使い方わかるかな?変な使いかたされない?
感想
本を読んで理解したつもりになっていても、実際に手を動かそうとすると全然理解できていないことがわかりました。。単に本に書いてある言葉だけを切り取って理解するのではなくて、根底にある思想的な部分を理解しなきゃなあ!ああ。
Discussion