gpt4 book ai didi

domain-driven-design - DDD - 是否允许工厂访问存储库?

转载 作者:行者123 更新时间:2023-12-01 12:46:02 25 4
gpt4 key购买 nike

我有一个名为 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,...))

你怎么看?

最佳答案

This means that when I'm creating a new Person with a specific address using a factory, I'd have to check if a same address already exists in the database and use an exisiting address for the user.



如果你信守单一职责原则,你不应该这样做。 PersonFactory不应该创建 Addresses但是 Persons .

更不用说 Address创建包括复杂的逻辑,例如检索 Address在数据库中,或多或少类似于用户填写的地址(如果这确实是您想要的)。您应该将其委托(delegate)给另一个对象。

关于domain-driven-design - DDD - 是否允许工厂访问存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15875603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com