2013-06-12 78 views
2

比方說,我有我的域「項目」的實體,具有有一個唯一ID(在正常的數字ID的頂部)是2個字母+ 4位數字的每一個項目。這個ID在所有項目中必須是唯一的。在DDD體系結構中,唯一ID生成屬於哪裏?

我有困難的時候把這個功能,感覺應該差不多才剛剛被放置在倉庫當項目保存第一次。

我確定它不屬於應用程序服務,我不確定它是否是作爲域服務的任何關注的業務層,並且將其作爲基礎結構服務感到奇怪,但它確實需要檢查是否存在任何其他項目與隨機生成的[LL]-[DDDD]類似的代碼。

即使我周圍放置它仍然呼籲從什麼地方東西repository.save這個代碼,所以問題是,我應該在哪裏放,給我一個免費的隨機ID像這樣的服務?

+0

有多少用戶正在同時創建會導致唯一性破壞的項目?這種情況發生的可能性有多大?自動化與管理員進行一次性修復相比,需要多少成本? –

回答

0

「自由隨機ID」或ID代是基礎設施,而不是商業領域,所以我將這種邏輯添加到一個持久層,並呼籲從我的資料庫中的一部分。例如ProjectRepository。假設項目實體在任何情況下都會有'id'字段。您可以在項目實體中執行驗證,以便id格式爲2個字母和4位數字,但只能在項目ID與您的應用程序中的其他實體ID不同時使用

1

作爲域的一部分的ID應由該域名。

如果域名沒有定義,你不應該讓他們在域或者任何IDS(嚴格地說,但它可能更容易將它們包括兩種方式)。

1

你的問題提到了一個 '正常的ID'。我假設這是你的數據庫的主鍵,你想在這裏生成的ID是爲人類(雖然爲什麼人類會使用2個字母+4位數的標識符是超出我的,但我看到更糟糕)。在這種情況下,密鑰的生成是一項業務功能,並確保它是唯一的業務規則。這兩件事都是域對象的責任。鑑於你的對象名稱,項目和你在問題中使用的語言,我建議可能Projects對象應該提供這個服務。原因在於只有Projects對象才能查看您創建的所有項目對象以檢查唯一性。

當然,你可以有一個算法來產生這個字段,確保唯一性,而不必檢查所有項目(一個好主意,順便說一句)。在這種情況下,您可能會允許項目在其生命週期的適當時間(可能在創建時)生成自己的ID。

相關問題