Entity(エンティティ)
データベースのデータに対するビジネスロジックの置き場所として使うカスタムクラスです。
Entityの特徴
一意性のあるデータの一塊り
あるインスタンスは他のインスタンスと重複しない。ユニーク。
SQLなどで取得するデータの1行分
DBの型をプログラミング言語の型に置き換えたもの
varchar→string、real→float
ロジックのある項目はValueObjectにする。
なお、コンストラクタ内でValueObjectをnewする。画面ロジック側ではnewしないこと。
Entityなどの複数項目を使ったロジックを記述する。
Entity内の単一項目だけでなく複数項目を作ったロジックを記述するクラスになります。
基本的に継承はさせない。
継承させてもソースを読むのがややこしくなるため。
基本的には可変にする。
バリューオブジェクトは不変でしたが、エンティティは基本的に可変にします。なぜなら、値と違ってDBの値などは変更されて当たり前だからです。ただ、全く変更がないと想定される属性に関しては不変にした方が良いです。(バグ混入を防ぐため)
同じ属性であっても区別する。
例えば、ユーザーというエンティティは名前が変わったとしても、同一であると判断します。現実世界に置き換えてみればわかりますが、同姓同名の人がいたとしても別人として区別されます。
であれば、エンティティは何で同一性を判断するのかといえば、主キー(id)になります。
なぜEntityを使った方が良いか?
文字列でアクセスするとスペルミスをする可能性がある。
コンパイルエラーではなく、実行時エラーになってしまいバグに気づきにくい。
テストコードが書きやすくなる。
記述がしやすくなる。
ValueObjectが運べる
配置場所
Domainの中にEntitiesというフォルダを作って入れる。
この記事へのコメントはありません。