我可以重用值对象吗?

Can I reuse Value Objects?

根据领域驱动设计,我可以从外部来源导入和重用常见的值对象,如电子邮件、SocialSecurityNumber、货币等吗?

这似乎很糟糕,因为我在我的域的核心依赖外部代码,但另一方面,我似乎会通过一遍又一遍地重写相同的代码来重新发明轮子。

好吧...可以导入和重复使用诸如电子邮件、SSN 之类的通用内容。基本上,导入内容的问题在于它们可能在其原始有界上下文中有其他含义。例如,货币可能不是您域所需要的。但是电子邮件之类的东西足够通用,无关紧要。

tldr; 可以重复使用通用概念,只要它们足够通用,在您的域中表示相同的东西即可。

P.S:您可以在验证输入时更多地重复使用它们,即在域外。

我觉得最好用自己的值对象;在公共库中实现。

然后在您的值对象中,您可以将验证和规则检查分派给您提到的外部资源;而不是自己做。

您甚至可以在它们之上添加自己的验证规则。例如,您可以在名为 "CompanyEmail".

的 class 中放置禁止来自常见电子邮件提供商(如 gmail、hotmail 等)的电子邮件的电子邮件规则。