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

コードの分割

今回はリーダブルコードの8章。コードの分割について。 ポイントとしては1行に情報を詰め込みすぎているような場合は分割して、意味がわかりやすい区切りにまとめよう、といったことでしょうか。つまりは「困難は …

no image

ユーザーに見せるエラーメッセージに関する考察

プログラムで難しいことの3つは テスト ログ エラーハンドリング とかいてきましたが、ユーザー側に見せるエラーメッセージについて考察して見ました。 Contents1 ログとエラーメッセージの違い2 …

no image

ファジープロジェクト対策 その2

前回に引き続き、大事だと思ったこと。一部単なるフレームワークの作り方的な内容になっているかも。 Contents1 テンプレート共通化2 バリデーション3 ログ出し4 異常系の処理5 新規プラグイン+ …

no image

コメントについて

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

no image

データのシリアライズ

おととしにJavaをやったときにでてきましたがSessionに情報を格納するときにでてきたシリアライズについて。 セッションはステートフルな状態を実現するための便利なデータの保存方法ですが、値をオブジ …

アーカイブ