在我们的代码库中,我们广泛使用 DAO。本质上是一个公开低级读/写 API 的层,其中每个 DAO 映射到数据库中的表。
我的问题是,如果我们对实体进行不同类型的更新,dao 的更新方法是否应该将实体 id 或实体引用作为参数。
例如,假设我们有客户和地址。我们可以有
customer.address = newAddress;
customerDao.updateCustomerAddress(customer);
或者我们可以
customerDao.updateCustomerAddress(customer.getId(), newAddress);
您认为哪种方法更好?
后者更方便,因为如果我们有实体,我们总是有 id,所以它总是有效。但情况并非总是如此,但必须在执行更新之前获取实体。
最佳答案
在 DDD 中,我们有聚合
和存储库
。 聚合
确保业务不变量保持不变,而存储库
处理持久性。
我建议聚合
应该是纯粹的,不依赖于任何基础设施代码;也就是说,聚合
不应该了解有关持久性的任何信息。
此外,您应该在域代码中使用通用语言
。话虽这么说,您的代码应该如下所示(在应用程序层):
客户 = customerRepository.loadById(customerId);
客户.changeAddress(地址);
customerRepository.save(客户);
关于java - dao(或者可能是存储库)应该将 id 或实体作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42505436/