我正在使用具有貧血域模型的遺留系統。訪問遺留系統中存儲庫的重構域邏輯
該域具有以下實體類別:Car
,CarType
,CarComponent
,CarComponentType
。
對於其中的每一個,都有一個單獨的存儲庫。還有一些服務可以訪問這些存儲庫並基本包含所有的邏輯。
我需要實施一種方法,確定供應商是否可以停止CarComponentType
。邏輯如下:只有當今沒有該組件的現有汽車時,纔可以停止組件。
最初,我在一個服務類中實現了它。
public boolean canBeDiscontinued(CarComponentType carComponentType) {
List<Car> cars = carRepository.getCarsWithComponent(carComponentType);
return cars.isEmpty();
}
這是有效的 - 但是這個邏輯從代碼中的其他地方使用。它可能會增長,它看起來像的東西,可能適合內的CarComponentType
類,而不是:
public boolean canBeDiscontinued() {
List<Car> cars = carRepository.getCarsWithComponent(this);
return cars.isEmpty();
}
但是,我不能把它放在那裏,因爲它需要訪問的資源庫(我的理解是實體知道數據訪問層的非常嚴重的反模式)。當加載組件類型時,我無法加載所有類型的汽車,因爲那可能是成千上萬的對象。我們沒有使用任何ORM,因此製作一個懶加載的集合不僅體積龐大,而且容易出錯。
像我第一次那樣在服務類中實際使用此方法更合適嗎?這不重要嗎?有另外一種選擇嗎?我應該從另一個起點開始重構嗎?
還有一個類似的問題here。但是我的問題涉及Java,所以我不認爲這個解決方案適用於我的情況。另外,對於使用汽車和組件作爲我的領域模型,提前抱歉。 :)
在哪一層我會把規範的實施?基礎設施? – Chris 2010-01-05 14:48:30
規範是域層的一個組成部分,因爲'域概念'是在規範中實現的。 – 2010-01-05 15:07:57