你如何处理DDD中的url slug生成?
内部构造函数?但依赖其他服务的实体并不好。
作为构造函数参数传递?我认为slu is不应该存在,因为它们不是业务要求。是吗?
或只是有一个二传手?
答案 0 :(得分:0)
URL slug似乎是域模型的一部分,尽管起初似乎是基础架构方面的问题。
如果您将其建模为实体的属性,则在构造函数参数中传递它不会有问题。当然,最好将它作为具有公共二传手的财产,以供任何人随时修改。
创建一个ISlugGenerator
接口,并将其注入适当的层(ApplicationService或DomainService,有关更多信息,请参见here),以生成URL字符串并将其在构造函数中传递给实体。 / p>
在表示层中实现ISlugGenerator
,该表示层实际上保存要通过URL访问的页面/路由。
您可能会争辩说,URL在域模型中确实没有位置,因为它只是与实体相关的一些信息,而未在任何决策过程中使用。
好吧,然后考虑电子商务应用程序中的产品描述或产品图像。是同一回事。您当然可以对这些属性具有验证逻辑,并且该验证应该是Domain的一部分,但是您可能不会根据它们做出任何其他决定。
因此,您不应该从“产品”实体中删除“说明”和“图像”吗?其实没有即使图片可能是一个URL,就像您提出的问题一样。
产品将在其构造函数中将imageUrl作为字符串参数接收,或通过实体中的方法进行设置。但是imageUrl将由某些ImageUploadService生成,其接口将在应用程序层中定义并在某些基础结构层中实现。