值對象沒有身份。 ORM需要身份來更新數據庫。DDD,值對象和ORM
如何欺騙ORM?
(標記爲值爲內部的對象不起作用,導致ORM存在於不同的程序集中並將它移動到同一個程序集中是不可接受的)。
在此先感謝。
值對象沒有身份。 ORM需要身份來更新數據庫。DDD,值對象和ORM
如何欺騙ORM?
(標記爲值爲內部的對象不起作用,導致ORM存在於不同的程序集中並將它移動到同一個程序集中是不可接受的)。
在此先感謝。
就我對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字段 - 我將它作爲值對象的另一個屬性(例如名稱,位置等)。
這可能不是真正的DDD,但它適用於我。
我不認爲這是有問題的。埃裏克埃文讓每個人的頭腦都在旋轉,因爲在沒有舉例的情況下談論概念很容易。 – 2012-11-16 22:11:23
當埃裏克埃文斯談到「實體具有身份,價值對象不」時,他不是在談論數據庫中的ID列 - 他談論的身份是概念。
VOs沒有概念的身份。這並不意味着他們不應該有持久性的身份。不要讓持久性實現影響您對實體vs VOs的理解。
看到我的帖子here。
但是那麼域模型只是數據庫的1:1,地址仍然可以是一個值對象,並且仍然有一個單獨的表。 – TWith2Sugars 2009-06-05 08:30:56
不,它不是數據庫的1:1。 您有一個Customer類和一個Adress類(它是值對象)。在NHibernate中,一個值對象被映射爲一個組件。 只要你有一個實體需要一個Id,它不再是一個值對象。 – 2009-06-05 08:39:47