在我正在构建的应用程序的注册部分中,我需要应用一个逻辑,规定电子邮件在数据库中必须是唯一的。由于我正在构建前端,因此我想知道是否可以创建一个 VO(值对象)来执行 API 调用来检查电子邮件是否唯一。这个想法非常简单,我将一个电子邮件字符串传递给一个类,并且在构造函数中,如果 API 说电子邮件已在使用中,我将引发错误。这里的重点是我不知道 VO 是否应该像那样进行 API 调用;虽然我知道它确实执行验证。
此外,如有必要,我可以在单独的类中执行对 API 的调用:服务,但我仍然需要在 VO 内调用。
很多人发现在构造函数中工作是一个坏主意。例如,请参阅 Misko Hevery 的这篇文章。
将值对象的实现与 I/O 紧密耦合是一个不寻常的选择;采用值对象模式的通常原因是您在某些本地数据结构中拥有信息,并且您希望组织查询该结构的方法。
添加 I/O 问题很奇怪。
拥有一个接受某些表单数据和 API 响应的工厂方法/命名构造函数可能是合理的,它可以生成“唯一”值或执行其他操作。