DDD、値オブジェクトとORM
-
09-09-2019 - |
質問
値オブジェクトは、アイデンティティを持っていません。 ORMは、データベースを更新するためのIDが必要です。
どのようにORMをだましするには?
(ORMは、異なるアセンブリに住んで、同じアセンブリに移動することは許容されないため、内部が動作しませんように値オブジェクトのIDをマーキング)。
事前に感謝します。
解決
限りDDDの私の理解が進むにつれて値オブジェクトは、あなたのエンティティを分割するだけの方法です。値オブジェクトは、データベース内のIDを保存しなければならない場合は、値オブジェクトではありません。
の例:の
ドメインモデルは、この(C#の)のように見えます:
public class Customer : Entity
{
public Guid CustomerID { get; }
public string LastName { get; set; }
public Address HomeAddress { get; set; }
}
public class Address : ValueObject
{
public string Street { get; set; }
public string City { get; set; }
public string ZipCode { get; set; }
}
対応するデータベース・テーブルには、この(擬似-SQL)のようになります。
CREATE TABLE Customers
(
CustomerID,
LastName,
HomeAddress_Street,
HomeAddress_City,
HomeAddress_ZipCode,
)
あなたはそれIDを持っているエンティティになるだろう別々のテーブルにアドレスを格納します。
他のヒント
エリック・エヴァンスは、「エンティティが値オブジェクトにはない、アイデンティティを持っている」について語るときに
、彼は、データベース内のID列の話ではないです - 。彼はの概念の
としてのアイデンティティについて話していますのVOには、の概念のアイデンティティを持っていません。それは彼らがの永続のアイデンティティを持つべきではないという意味ではありません。永続実装がのVO対エンティティのご理解を曇らせるさせてはいけません。
ここの私のポストのを参照してください。
個人的には値オブジェクトのidフィールドを持っている - 私は(例えば、名前、場所などのような)値オブジェクトの他の属性としてそれを扱います。
それは本当DDDではないかもしれないが、それは私のために動作します。
所属していません StackOverflow