academist-reading.connpass.com
「良いコード/悪いコードで学ぶ設計入門」読書会 第3回 を開催しました。
みんなで書いたホワイトボード
(あとでFIXしたものを貼ります…!)
感想
3.1 クラス単体で正常に動作するよう設計する
- 「状態」を表すインスタンス変数は増やしたくないという話が出ました
- 有効/無効、公開/保留/非公開みたいなもの
- 複数作ってしまうと、組み合わせがスゴいことに…
- 普段、気をつけてます…!
正常
とはどういう状態?という話が出ました- なんとなくイメージはあるけど…うまくかけない><
- 意図しない例外が起きない、かなぁ…。
- 「状態」が複数あって、ある組み合わせが絶対存在しないのであれば、状態を操作するメソッドではそれが起きないようにちゃんとする、みたいな…。
- 抽象的、汎用的なクラスではバグなく作るのが難しいという話が出ました。
- interfaceとかabstractなクラスのことだそうで…確かに単体ではテストを書きづらそうです。
- Rubyだと…プログラム中で継承したりincludeしたりできるので、普通に書けるのがありがたい感じ…。テスト書いてます!
- 「利用者の視点」大事にしたいです。
- 急いで作ると…どうしてもクラスを使う人のことまで考えなくて…
- 結局、後から自分が使うときにスゴく苦労して涙する感じです…。
3.2 成熟したクラスへ成長させる設計術
- コンストラクタで初期化が難しいケースがあるという話が出ました。
- ファイルから読み込むとか、データベースに接続するとか、ちょっと時間がかかるようなものが必要な場合…
- これは自分もここではやらないですね…。
- 読み直していて…
- ファイルを読み込んでいない/読み込んだ、接続した/してないという状態なのかも。
- そういう状態であるときに、他の操作ができない作りにできれば…?
- Moneyクラス、ここまで読んだところでは、amountの上書きをしたくない理由がピンと来てません…。
- 商品とか注文のようなクラスがあり、それらがMoneyという属性を持つことを想定してるのかな…。
- あとのほうの説明を期待…!
3.3 悪魔退治の効果を検証する
- Moneyの背景がちょっと曖昧だったために、いろんなことを考えてしまって、みんなでモヤモヤしてました。
- Valueオブジェクトなら、書いてあるとおり、うまくいきそうです。
- クラス一般としたら、例外が一杯ありそうでした。
- Userみたいなクラスで、名前を変更したら新しいオブジェクトになりました…!っていうのはアリなのかしら…。
3.4 プログラム構造の問題解決に役立つ設計パターン
Column 種類の異なる言語と本書のノウハウ
- ノウハウの多くは言語に依らなそう。
- あくまでも「多くは」
- 言語やフレームワークの方針がある場合はそちらを優先させたほうがよいのでは?という話が出ました。
- SpringMVCではModelやFormが処理を通じて書き換わっていくのが普通なんだそうで…。
- ムリヤリ変えると、あちこち歪みそうです。
- SpringMVCではModelやFormが処理を通じて書き換わっていくのが普通なんだそうで…。
運営としてのふりかえり
KPT方式で。
Keep
- 毎回出てくれる方がいてうれしいです。
- 時間がのびてしまいましたが、時間が過ぎてしまう前に案内できました。
Problem
- 発言者が偏ってしまいました。
- 発言されてない方も学びを得られているかな?大丈夫かな?という感想がありました。
- 発言内容が「マサカリ」だと思われてないか心配している感想がありました。
Try
- Meetのリアクションを求めてみます。
- 言葉だとまとめるのが大変なのもわかるので、軽めのリアクションなら…?
- 心理的安全性のためのルールを入れてみます。
- 心理的安全性を脅かすような発言はなかったと思いますが、あえて明記することで、大丈夫な場であることを示せるかな…と。
おわりに
参加してくれたみなさん、ありがとうございました! あとでざっと見直しても、一人で読むより圧倒的に気づくことが多いので、今後も継続してやっていきたいと思います!