5

根據DDD(Blue book,Evans),工廠有責任在有效狀態下創建一個聚合根。這是否意味着它應該能夠創建技術ID(mongoDB世界中的objectId)以及域ID?DDD和MongoDB:可以讓Mongo創建ObjectID嗎?

一方面,這看起來像一個技術細節,讓Mongo處理ID的創建似乎是可以的。

另一方面,通過id啓用查詢(通過在DDD存儲庫中使用getById)將技術ID公開給域,這反過來將使其成爲Factory的職責來創建它。

也許我無法理解技術標識與DomainId的不同使用情況/重疊等問題,或者我過於熱衷,但無論如何,我都會很感激您的意見。

簡而言之: 在DDD中:工廠是否應該能夠創建技術ID以及域ID?

可能的實現:高/低(How to set the hilo sequence starting value in MongoDB Norm?

編輯:雖然高/低的方式曝光工廠的持久層,這恐怕只有庫應該知道。嗯

感謝

+0

輕微不完全相關的評論; MongoDB實際上並不創建這些ID,客戶端(驅動程序)確實(除了upsert操作)。 – 2012-08-03 16:06:49

回答

3

工廠不必關心自己的ID,因爲總的有效性是正交的身份。可以通過幾種不同的方式分配標識,或者作爲存儲庫必須管理它的關係數據庫中的增量ID,或者作爲UUID/GUID,在這種情況下,它可以由工廠或存儲庫分配,或者即使是呼叫客戶端也很方便,因爲客戶端默認具有密鑰。

只要有可能,我會盡量保持聚合的單一身份。我不確定MongoDB是否需要額外的技術ID,但如果它確實存在,並且域ID不能用於其位置,那麼MongoDB應該自行管理它,並在幕後進行管理。

+0

「聚合的有效性與身份正交。」。在某些情況下,聚合必須有一個身份才能被稱爲有效? – 2012-08-03 09:29:20

+0

但的確,只有一個域名(應該在工廠設置好嗎?)而不是技術ID。仍然無法解決爲什麼在mongodb中有一個單獨的技術ID是首選(但不是必需的),但我想這是一個完全不同的問題 – 2012-08-03 13:13:51

+0

指定的標識值可以指示聚合是持久的,但有效性是不同的。我當然看到了這種關係,我只是認爲身份在這方面得到了特殊的對待...... – eulerfx 2012-08-03 15:24:40

相關問題