Open3
良いコードの書き方勉強会メモ
発表1
対称原理
- 形の対称性
- 上・下
- 発注・受注
- true / false
- クラス、関数の対
例
正常系はOkだが、異常系でダメ
あるべきところに期待されたモノがない
「美しい」を対称性として表現しているのか
対を発展させると3対とか4対のような対称性をかんがえることも可能か
ドメインを理解するときの取っ掛かりとしての考え方
ケント・ベック
良いコードとは?
- コミュニケーション
- シンプル
- 柔軟性
コミュ
読みやすい。意図を読み取れる
コードでコミュニケーションをする?
シンプル
余分な複雑性がない
対象の問題・課題が本質的に複雑であることは事前に判断できない。どうすれば?
柔軟性
DRY
YAGNI
パターン
- Composed method
- ひとつの大きなメソッドを、同じ粒度の細かいメソッドに分割していく
- 例外の扱いが難しいんだよな
- Double Dispatch
- 二重になっている分岐をクラスに切り出して、組み合わせる
- 分岐のためのクラスやメソッドを抽出する
- 複雑じゃね?あまり好きじゃない
- Method Object
- 引数をたくさん持たせるのではなくてオブジェクトに纏める
- これも最近は関数型プログラムの文脈であまりつかわないかも
けっこう古いんだよな
変更に強いコード
良いコード
- 読みやすい
- 保守しやすい
- 早い
- 安全
- 小さい
例:自社プロダクト
- テスト
- 疎結合
- リファクタ
どの順番?どうやって到達?
複雑さ
影響範囲の予測不能性
A, B の文脈が意外と難しい
DI
例)ログ出力
インターフェースに依存すると、どの実装を採用するかどこで決定すればよいか
インターフェースをあとで変更するのが難しい。「安定」させるにはどうすればよいか?