DDD:在哪里生成实体的 url slug?

Jai*_*cap 5 entity domain-driven-design slug

你如何处理 DDD 中的 url slug 生成?

内部构造函数?但是依赖其他服务的实体并不好。

Pass as constructor argument? I think slugs shouldnt be there because they are not business requirements. are they?

or just having a setter?

Phi*_*ana 1

URL slug 似乎是域模型的一部分,尽管一开始它看起来像是一个基础设施问题。

如果您将其建模为实体的属性,我认为将其传递到构造函数参数中没有问题。这当然比将其作为具有公共设置器的财产更好,任何人都可以随时对其进行修改。

创建一个ISlugGenerator接口并将其注入到适当的层(ApplicationService 或 DomainService,请参阅此处了解更多信息),以生成 URL 字符串并将其在构造函​​数中传递给实体。

在表示层中实现ISlugGenerator,该层实际保存将通过 URL 访问的页面/路由。


您可能会说 URL 在域模型中确实没有位置,因为它只是与实体相关的一些信息,但在任何决策过程中都不使用。

好吧,然后考虑一下电子商务应用程序中的产品描述或产品图像。这是同样的事情。您肯定有这些属性的验证逻辑,并且此验证应该是域的一部分,但您可能不会根据它们做出任何其他决定。

那么,您不应该从产品实体中删除描述和图像吗?事实上,没有。尽管该图像可能是一个 URL,就像您问题中的 slug 一样。

产品将在其构造函数中接收 imageUrl 作为字符串参数,或者通过实体中的方法进行设置。但是imageUrl将由某些ImageUploadService生成,其接口将在应用层中定义并在某些基础设施层中实现。