最近,我在考虑过去在尝试设计特定领域模型时遇到的一些问题,比如说地址,它可以在给定的上下文中编辑,但在另一个上下文中不可编辑。我目前的思维方式是,我将同时拥有地址的值对象版本和地址的实体,可能附加到客户帐户之类的东西上,以获取它的身份。
现在我意识到,如果我要创建一个新地址,例如当用户输入一个新地址时,我很可能还需要能够继续编辑该地址,也许还需要编辑任何预先存在的地址在相同的有界上下文中。出于这个原因,我可以假设在这个上下文中,地址应该被建模为实体而不是值对象。这引出了我的主要问题,即如果您在修改现有数据集或创建新数据时始终使用实体,那么拥有一个工厂来创建任何值对象是否有意义?
当我遵循这种思路时,对我来说开始出现的规则是,值对象应该只被创建来表示对应用程序来说是静态的东西,或者已经持久化到数据库中的东西,而不是暂时的东西在当前域上下文中。因此,我唯一应该创建任何类型的值对象的地方是当它们在聚合根存储库中或代表它们被重新水化/物化时,用于持久值或在静态值的情况下在服务中。这开始对我来说似乎很清楚,但是让我担心的是,我还没有在其他任何地方读到有人得出相同的结论。不管怎样,我希望有人能证实我的结论或让我直截了当。