0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PGスタイルシリーズ:導出項目を知る

Posted at
1 / 12

変更しにくいPG・読みにくいPG

変数に着目すると・・・

  • 謎の変数が多い
  • 同時に更新しないといけない変数が多い

その変数、減らせます!


導出項目とは

  • ある項目から算出できる項目
  • 導出項目の値を永続化するのは一般的には避けるべき
    →例外はスナップショットを残す必要があるとき

分かりやすい例:日本人のフルネーム

  • データ上は苗字と名前の2つに分けて保存
  • フルネームが欲しいときは、毎回、苗字と名前を連結する

導出できる項目を変数にしてしまうことのデメリット

  • 更新を漏らすとバグになる

考え方

  • 意識せずフルネームのような項目を変数に持たせてしまっているのはよくあること!
  • 「これ、導出項目じゃない?」と考える癖をつけるのが大事

導出項目をどう表現するか

  • C#の場合、読み取り専用プロパティが便利
readonly string familyName;
readonly string firstName;

string fullName
{
    get => familyName + " " + firstName;
}

これはものすごくよく使う書き方。ぜひ覚えて欲しい。


デメリット(1/2)

  • 計算量が必要
    →場合によっては性能に影響が出るかもしれない

デメリット(2/2)

  • 極端な話、DBには全てのデータあるので、キー以外は導出項目と言えないこともない
  • 性能とのトレードオフは常に意識する必要がある
  • とはいえメモリ上で計算が完結する場合は、性能を意識する必要はほぼない

注意点

  • 導出する際の計算に副作用が伴う場合は、毎回計算するのは不適切
    副作用:通信/他の変数に書き込みが生じる など

最後に

  • 導出項目はシステム開発全体で広く使える考え方
  • 性能とのトレードオフを意識して設計するのが難しくかつ楽しい
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?