おはようこんにちはこんばんは。
さて、今回は自作したライブラリの宣伝にはなってしまいますが、Stannumというライブラリを使って、便利に使える値オブジェクト(Value Object)を簡単に作る方法を紹介したいとおもいます。
ライブラリ本来の使い方からは少し逸れますが、ライブラリのクラスでスカラー型をラップするという性質を利用して、そのクラスを継承してValue Objectとして活用しました。
導入
他のライブラリ同様、いつも通りcomposerから入れてあげます。
composer require tumugin/stannum
Stannumの紹介については、上のスライドを見ていただけると分かりやすいと思います!
Value Objectを作る
今回は試しにユーザの苗字(Last Name)を表現するValue Objectを作ってみます。
use Tumugin\Stannum\SnString;
class UserLastName extends SnString
{
}
必要があれば byString
関数などをオーバーライドすることで、中身を検証してからインスタンスを生成するようにしましょう。
use Tumugin\Stannum\SnString;
class UserLastName extends SnString
{
public static function byString(string $value)
{
if (SnString::byString($value)->trim()->equals('')) {
throw new \RuntimeException('苗字は空に出来ません');
}
return parent::byString($value);
}
}
生の値からのインスタンスの生成は、継承元のクラスに生えているbyString
,byInt
,byFloat
関数が使えるので、そちらを使います。
UserLastName::byString('藤宮');
数値型ももちろん...?
use Tumugin\Stannum\SnInteger;
class UserReactionCount extends SnInteger
{
}
文字列型と同様に作ることが出来ましたね!