エンジニアリングとお金の話

都内で働くエンジニアの日記です。

システム設計の原則1

【SPONSORED LINK】

積読していたシステム設計の原則を読んでいる。この本非常に良い。今までモヤモヤしていたことが凄くクリアになっていく。学んだことをまとめる。

目的ごとのローカル変数を使う

ダメコード

taxRate = 1.05

price = quantity * unitPrice

price = price * taxRate

良いコード

taxRate = 1.05

basePrice = quantity * unitPrice

itemPrice = price * taxRate

よくやりがちだけどpriceを使い回し過ぎて分かりづらくなっている。変数の使い回しは同じローカル変数を使っている範囲に変更が波及するので予想外の副作用の原因となる。このように1つの変数を使いまわして代入を繰り返す書き方を破壊的代入と呼ぶ。破壊的代入がなくなればプログラムを変更したときの副作用が減り、コードが安定する。

メソッドの抽出

段落に埋もれていたロジックとデータをメソッドに独立させること。コードの重複を防ぎ、メソッドの名前からコードの意図を理解しやすくなる。

異なるクラスの重複したコードをなくす

2つのクラスでコードの重複がある場合はお互いの処理を別クラスに切り出す。

狭い関心事に特化したクラスにする

特定の関心事に特化した小さなクラスが、コードの見通しを良くして変更しやすくなる。なお、業務で使われる用語に合わせて、その用語の関心事に対応するクラスをドメインオブジェクトと呼ぶ。業務の用語と直接対応するドメインオブジェクトを用意することが、業務アプリケーションの変更を容易にするオブジェクト指向らしい設計のアプローチである。

メソッドは短く、クラスは小さく

  • 名前は略語ではなく普通の単語を使う
  • 数行のコードを意味のある単位として段落に分ける
  • 目的別の変数を使う(1つの変数を使い回さない)
  • 意味のあるコードのまとまりをメソッドとして独立させる
  • 業務の関心事に対応したクラス(ドメインクラス)を作る