2010-06-01 75 views
0

我正在構建問卷創建者。問卷包含部分,部分由頁面和頁面組成。問卷是聚合根。域驅動設計值對象,如何確保唯一值

部分,頁面和問題可以具有所謂的短碼,在調查問卷中應該是唯一的(但在數據庫中不是唯一的,因此它們不是嚴格意義上的)。我打算將簡碼作爲價值對象,並希望在調查問卷中包含它應該是唯一的業務規則,但我不確定如何確保這一點。我的理解是,價值對象不應該訪問存儲庫或服務層,所以它如何發現它是否是唯一的?

感謝您的任何幫助。

達倫

+0

您的「短代碼」是否生成或是否是系統的輸入?這將會改變答案。即如果我輸入一個不存在的新短代碼,它會被插入嗎?不過,通常通過服務層來驅動你的輸入。該服務可以調用構建聚合並驗證它是唯一的。如果它是唯一的,則允許插入/更新。如果不是,不要讓它發生。該域是分層的,在域對象中以及調用它們的服務。您的業​​務邏輯將根據您所從事的工作範圍而生活在不同的位置。 – 2010-06-01 19:15:03

回答

0

您可以將生成簡碼的責任分配給問卷聚合。它可以基於嵌入問卷對象的簡單計數器。每個想要創建短代碼的實體都會調用其包含的調查問卷的NextShortCode()方法來獲取下一個唯一的(在當前調查問卷的範圍內)短代碼值。

0

顯然,你將需要在數據庫中的PK場。你如何實現這一切取決於你,但如果是我,我會將PK字段帶入你的值對象中,以便它自動處理。

0

你會想要使用像Guid或UUID。具體如何生成一個將取決於您的應用程序使用哪種語言。