我正在查看來自http://code.google.com/p/ndddsample的偉大NDDDSample源以瞭解DDD。感到困惑的東西DDD示例:CargoRepository.Store()可用於控制器?
的CargoRepository有),這是由BookingService.AssignCargoToRoute()和CargoTrackingController.Search(稱爲find()方法:
Cargo cargo = CargoRepository.Find(trackingId);
CargoRepository也有從BookingService稱爲存儲()方法.AssignCargoToRoute():
Cargo cargo = cargoRepository.Find(trackingId);
if (cargo == null)
{
throw new ArgumentException("Can't assign itinerary to non-existing cargo " + trackingId);
}
cargo.AssignToRoute(itinerary);
cargoRepository.Store(cargo);
我的困惑是,似乎有什麼可調用CargoRepository.Store(),這將繞過在BookingService.AssignCargoTo業務邏輯停止CargoTrackingController路線()
爲什麼在DDD中允許這樣做?版本庫是否應該分成兩部分,一部分用於讀取application/ui/domain/service,另一部分用於寫入域/服務?
我一直在以錯誤的方式看域對象。我以爲我會打電話給oEntity.Load(someId),然後oEntity.DoSomething(x),然後oEntity.Save(),但是這將持久性的責任放在違反單一責任原則的實體中。實體只應該擁有自己的方法,並且在多個實體參與單個業務流程的情況下創建服務。我現在得到了更多的理解,謝謝。有趣的東西,謝謝 – 2011-03-07 19:19:30