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

トランザクショントークンについて

フォーム画面で入力を行うときにはPOSTでデータを受け取ってエラーチェックしたり、データベースに入力をしたりします。 ただその時に何も考えずに安易に送信→受信の際に以下のようなトラブルがあり得ます。 …

no image

マイクロサービスについて

マイクロサービスについて勉強したので少しメモを。 参考文献 Software Design 「2020年1月」 Contents1 マイクロサービスとは?1.1 具体例1.1.1 フロントエンドとバッ …

no image

テスト分類について

一般的なテスト工程での分類や個人的に大事だと思うこと Contents1 全プロセス共通1.1 テストデータ作成バッチ1.2 ローカル、開発、ステージング、本番の分岐2 PT(プログラムテスト)、単体 …

no image

コメントについて

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

no image

オブジェクト指向 アプリケーション間連携(主にWebAPI)

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日はプレゼンテーション層、いわゆるMVCのViewにあたる部分。 Contents1 アプリケーション間連携(主にWEBAPIに関 …

アーカイブ