skillup

技術ブログ

アーキテクト設計全般 プログラミング全般

型の意識について(ValueObjectの活用など)

投稿日:

現在の現場でコードレビューをしてもらう機会が増え、自分が弱かった型の意識について。

現在ではPHPでも型を記述してコーディングすることが一般的なため、静的言語と同じように型を意識することが増えてきたかと思います。

型を意識することのメリットとして

  • プログラム実行前に型が正しいかをエディタで検知できる
  • 制限をつけることができ、正常な値を担保できる
  • nullの可能性があるかどうかがコードからわかるため、型と合わせて仕様書がわりになる。
  • といってもstringやintなどだけだと(特にstring)広すぎるので、コード系の値(会員番号、メールアドレス、コード系)や金額、日付など業務上意味のあるデータに関してはValueObjectとして持たせればこれも仕様書がわりになる
  • 基本的なPrimitive以外に 日付ならCarbonなどのオブジェクトを使う
  • 値自体にメソッドを持たせることができ、応用範囲が広い(Priceオブジェクトに税率計算を持たせるなど)
  • 定数なども直打ちよりはEnumなどで意味を持たせた値にする(後でコードを読んだときにこれが何かわかるため)

自分が見た中でのデメリットなど(基本的には導入した方が良いのですが、プロジェクトの途中移行だったり不徹底だと結果的にプロジェクトの遅延になります。)

  • null、”などを当然全て切り分けて判定する必要があるのでemptyなどを使っていたプログラマにとってはコードがやや冗長になる
  • ===で書くことが必須になるので型不一致でエラーで落ちることが増える
  • 中途半端なプロジェクトの場合、かえってバグを頻発する(stringとintの不一致やnull関連の処理が適当なことが一番の原因)
  • 3項演算子はもとより、??や$foo = $a?->b();などの記法を知っておかないと表現が冗長になる
  • HTMLの場合送った文字列は全て文字列になること、Laravelなどのフレームワークは空の場合、nullになるなどの仕様に注意。

-アーキテクト設計全般, プログラミング全般
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

ExcelVBAに関して(主にプロシージャ)

いつも半年ごとぐらいに触っていてあまり知識が蓄積しないので(汗)これを機につまづいたところをちょっとメモ。 Contents1 基本2 メモ3 参考リンク 基本 基本的な変数の代入や条件分岐、ループな …

no image

ログの設計指針について

今まで10以上近い現場で仕事をしてきましたが、どの現場でも絶対必要になる(かつどこもあまり対策が取られていない)技術としては 検証したい状態の復元がすぐにできる(テストデータ作成) ログの適切な設計 …

no image

コメントについて

リーダブルコード 第5・6章はコメントについて。 今回はコメントです。ここは結構賛否両論になるところではないかと思います。 ざっくり分けると「できるだけコメントは詳しく書くこと」という意見と「コメント …

no image

Eclipseのシンタックスハイライト

先日PCがクラッシュした時にEclipseを入れなおしたんですが、普段あまり意識せずに使っていたのでhtmlのシンタックスハイライトをだすためだけに2時間ぐらい費やしました・・・自戒の意味も込めてメモ …

no image

シェルの基礎+ユーザー切り替え関連

雑誌を見ていたらシェルの特集があったので、ちょっとメモリます。 補強したいところのみ要点をチェック。 Contents0.1 実行パスについて0.2 ビルドインコマンド0.3 シェル変数・環境変数0. …

アーカイブ