我是相當新的領域驅動設計(DDD),但我明白這是你的應用服務,這是進入你的「模型」說話。該服務可以與使用源(文件,數據庫等)來獲取數據的存儲庫通信。該存儲庫返回一個實體。領域驅動設計,實體延遲加載
這是我所瞭解的全球概念。服務知道倉庫,但不是實體等
現在我有以下問題。
我有一個實體的用戶,這是類似如下(只是一個例子)
<?php
class User
{
protected $name;
protected $city_id;
public function getCity()
{
// return $city_entity;
}
}
的getCity()函數返回的城市實體。我希望這個函數使用延遲加載,因此在使用用戶存儲庫時注入CityEntity並不是真正的延遲加載。
我帶着兩個解決方案來解決這個問題。但我覺得這兩者都是反對DDD校長的。
我想出了第一種方法是在用戶的實體,它有缺點注入城市庫:如果你需要更多的庫,你需要加載它們都在實體。它看起來像answer,但它看起來像是我的存儲庫的包裝。那麼爲什麼不直接注入存儲庫呢?
第二種解決方案是,您爲該實體提供服務定位器。這樣做的缺點是除非您閱讀代碼,否則您不知道需要哪些存儲庫。
所以,現在的問題是,什麼是給懶加載的靈活性,同時保持DDD校長完好的最佳方法?