そらえふのブリキ

ドメインプリミティブ

ビジネスロジックを記述する際に、処理がコードの至る所に散らばってしまい、データや計算の整合性が取れなくなってしまうことがあります。

例えば、長さを扱うアプリケーションで単純にint型で長さを扱った場合、メートルとセンチメートルを混同してしまい、深刻なバグを引き起こす可能性があります。 また長さを扱う場合、単位を変換したいことがあります。変換ロジックがUtilityクラスにある場合、そのロジックがすでに存在していることに気づかず、同じロジックを2度記述してしまうことがあります。

このような課題を解決するために、定義された型のことをドメインプリミティブな値と呼んでいます。 ドメインプリミティブは、プログラミング言語のプリミティブな値のように使える、ドメイン特有の値のことです。

ドメインプリミティブは通常はValue Objectのような実装をすることが多いです。 例えば、長さを扱う場合、次のようなクラスを定義すると良いでしょう。

«enum»

LengthUnit

METER

CENTIMETER

Length

- int value

- LengthUnit unit

Length convert(LengthUnit unit)

Lengthクラスは、長さを表す値とその単位を持ちます。 LengthUnitクラスは、長さの単位を表す列挙型です。

Lengthクラスは長さの単位を持っているため、長さの単位を混同することがなくなり、単位の変換を行うメソッドを持っており、自由に単位を変換することができます。

ドメインプリミティブを使うことで、より安全でロジックの整合性が取れたプログラムを作ることができます。

注意点

あらゆる値をドメインプリミティブにすると、かえってコードが複雑になる場合があります。 ある型を導入するということは、アプリケーションが管理するべきものが増えるということを意味します。

例えばLength型を導入するのは、単位が重要な役割を果たす場合に導入すると効果的です。 例えば、人のプロフィールを表現する国内向けアプリを作るような場合だと、人間の身長は通常cmで表現されることが多いので、わざわざLength型を導入する意味は薄いでしょう。 むしろ、身長を表現するのにint型を使ったほうが、よりシンプルになります。

しかし、国際的なアプリで文化的に身長をフィートで表現することがある場合は、Length型を導入すると便利です。 ユーザーの国設定からフィートに変換するロジックをLengthクラスに持たせることで、ユーザーの国設定に応じた身長を表現することができます。

そらえふ

ソフトウェアエンジニア。趣味は競馬、写真、ゲーム。

お問い合わせはXのDMでお願いします。