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

时间:2015-03-12 13:26:36

标签: entity domain-driven-design slug

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

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

作为构造函数参数传递?我认为slu is不应该存在,因为它们不是业务要求。是吗?

或只是有一个二传手?

1 个答案:

答案 0 :(得分:0)

URL slug似乎是域模型的一部分,尽管起初似乎是基础架构方面的问题。

如果您将其建模为实体的属性,则在构造函数参数中传递它不会有问题。当然,最好将它作为具有公共二传手的财产,以供任何人随时修改。

创建一个ISlugGenerator接口,并将其注入适当的层(ApplicationService或DomainService,有关更多信息,请参见here),以生成URL字符串并将其在构造函​​数中传递给实体。 / p>

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


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

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

因此,您不应该从“产品”实体中删除“说明”和“图像”吗?其实没有即使图片可能是一个URL,就像您提出的问题一样。

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