我有一個名爲Person的聚合根。該人也有一個地址。這些類之間的關係是ManyToOne(許多人共享相同的地址)。DDD - 是否允許工廠訪問存儲庫?
這意味着,當我使用一個工廠創建一個新的人與一個特定的地址,我必須檢查是否有相同的地址在數據庫中已存在並使用exisiting地址的用戶。
這需要我廠有機會獲得一個地址庫(或直接到數據庫)。這是否允許?如果不是,那麼做一個更好的方法是什麼?
//編輯 我的解決辦法是現在以下幾點:
我有一個類PersonService持有登記一個人的邏輯。方法register()
已經佔用由AddressFactory創建的地址對象。 Addressfactory可以訪問AddressRepository來檢查輸入的地址是否已經存在。下面的代碼:
public class PersonService{
@Inject private PersonRepository pRepo;
public Person register(Name name,..., Address address){
//check if same person exists,
//create person, persist person
return person;
}
}
public class AddressFactory{
@Inject AddressRepository aRepo;
public Address create(String street, int number, ...){
//check if address with attribues exists in repo,
//if not create new address
return address;
}
}
和一些豆類調用此方法是這樣的:
personService.register(new Name("test"),..., addressFactory.create("Some street", 1,...))
你覺得呢?
只是澄清 - 你說的是從用戶輸入的內容中推導出一個現有的地址,對嗎?你會問用戶他是要選擇那個地址還是默默地將它與指定的地址等同起來?這個想法默默地等同於 – guillaume31 2013-04-08 15:00:17
。 – user1727072 2013-04-09 07:02:38