変更しにくいPG・読みにくいPG
変数に着目すると・・・
- 謎の変数が多い
- 同時に更新しないといけない変数が多い
その変数、減らせます!
導出項目とは
- ある項目から算出できる項目
- 導出項目の値を永続化するのは一般的には避けるべき
→例外はスナップショットを残す必要があるとき
分かりやすい例:日本人のフルネーム
- データ上は苗字と名前の2つに分けて保存
- フルネームが欲しいときは、毎回、苗字と名前を連結する
導出できる項目を変数にしてしまうことのデメリット
- 更新を漏らすとバグになる
考え方
- 意識せずフルネームのような項目を変数に持たせてしまっているのはよくあること!
- 「これ、導出項目じゃない?」と考える癖をつけるのが大事
導出項目をどう表現するか
- C#の場合、読み取り専用プロパティが便利
readonly string familyName;
readonly string firstName;
string fullName
{
get => familyName + " " + firstName;
}
これはものすごくよく使う書き方。ぜひ覚えて欲しい。
デメリット(1/2)
- 計算量が必要
→場合によっては性能に影響が出るかもしれない
デメリット(2/2)
- 極端な話、DBには全てのデータあるので、キー以外は導出項目と言えないこともない
- 性能とのトレードオフは常に意識する必要がある
- とはいえメモリ上で計算が完結する場合は、性能を意識する必要はほぼない
注意点
- 導出する際の計算に副作用が伴う場合は、毎回計算するのは不適切
副作用:通信/他の変数に書き込みが生じる など
最後に
- 導出項目はシステム開発全体で広く使える考え方
- 性能とのトレードオフを意識して設計するのが難しくかつ楽しい