我有一个名为 Person 的聚合根。该人也有一个地址。这些类之间的关系是ManyToOne(许多人共享同一个地址)。
这意味着当我使用工厂创建具有特定地址的新人员时,我必须检查数据库中是否已经存在相同的地址并为用户使用现有地址。
这要求我的工厂可以访问地址存储库(或直接访问数据库)。这是允许的吗?如果没有,有什么更好的方法来做到这一点?
//编辑我的解决方案现在如下:
我有一个 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;
}
}
在某些 bean 中,这个方法是这样调用的:
personService.register(new Name("test"),..., addressFactory.create("Some street", 1,...))
你怎么看?