我在工作中討論聚合根和使用導航屬性來遍歷子對象。MVC DDD EF Complex子對象遍歷
方案1:
- 客戶是聚合根
- 地址是一個實體
- 聯繫是
一個客戶可以有多個地址的實體和地址可以有多個聯繫人。我使用客戶ID在下面查詢客戶存儲庫並返回一個客戶對象。
Dim customer as Customer = _customerRepository.GetById(request.Id)
如果我們需要訪問客戶地址,然後遍歷客戶對象內的地址,如下所示。
Dim address as Address = customer.RetrieveAddress(request.AddressId)
然後,這種方法將對x個子對象進行。我已經展示了一個簡單的例子,但是對於包含數百萬條記錄的數據庫表而言,一旦聚合根對象被排隊並返回時,其他人如何在遍歷多個子對象時管理其性能問題?
方案2:
同上,但不是查詢客戶資料庫,並返回一個客戶對象的例子中,我們返回一個子對象,而不是。
Dim address as Address = _customerRepository.GetAddressById(request.AddressId)
現在,因爲我們查詢了地址對象,這意味着我不必遍歷客戶對象才能到達它。即使我已經使用客戶存儲庫直接查詢地址表並返回地址對象,這是否允許遵循DDD?或者我應該使用方案1,在此查詢客戶存儲庫並返回作爲聚合根的客戶對象並遍歷子對象?
我問的原因是因爲在我們的DB圖中,我們有幾個表從我們的聚合根中遍歷,並且可能會隨着時間的推移而包含數百萬條記錄,這會降低性能。
只是想知道其他人如何在不降低性能的情況下徹底地應用DDD,因爲只要您使用EF時使用了導航屬性,它就會爲每個子對象發送一個查詢,如果它是在for循環中。
邁克