在使用域驱动设计开发的博客应用程序中,“Post”实体具有相关的标签实体集合。
在创建帖子(例如,从UI填充对象)时,我想通过REST调用第三方API,它接收帖子的内容并提取语义标签(link text)以进行关联。
主要问题:设计此问题的最佳方法是什么......
它是否设计得最好,以便Post实体调用PostServices.GetTags(Postcontent)等域服务传递其内容并检索标签列表。?
** PostServices.GetTags将通过另一个包装类与REST API接口。
或者第三方API是否应该作为存储库包装?
Post.GenerateTags()函数应该根本不存在于域实体中吗?
更多问题 :
1:我还读过,让域实体与域服务交谈是不好的做法。这是真的吗?
2:通过工厂创建方法获得对PostServices域服务的引用是否可以。 e.g ...
IPostService PostService = ServiceUtil.GetPostService(); return PostService.GetTags(Post.content);
3:将域名服务与第三方API相结合是否可以接受?
4:域实体是否应该只知道如何处理通过调用REST API的应用层接收的标签。
慢慢地试图了解DDD,但我似乎无法找到任何关于如何实现此类事情的例子。
答案 0 :(得分:3)
在博客应用程序中,帖子是实体,标签是价值对象。标签没有标识。你应该:
帖子有一个标签列表。
问题:
1:我还读过,让域实体与域服务交谈是不好的做法。这是真的吗?
是的,这不是一个好习惯。您实体不希望与域服务耦合。如果您这样做,那么以后就无法重复使用它们。您是否考虑过发布域名活动?您可以告诉您的服务域执行某些火灾域事件。
<强> 2。 :通过工厂创建方法获得对PostServices域服务的引用是否可以。例如:IPostService PostService = ServiceUtil.GetPostService();返回PostService.GetTags(Post.content);
是的,这是可能的。工厂方法可以返回抽象类或接口。这是一个很好的软件设计原则“代码到接口而不是实现”。如果您这样做,您将能够在以后更改您的实现,而不必更改您的客户端代码。
3:将域名服务与第三方API相结合是否可以接受?
我不建议你这样做,但这是可以接受的。
抱歉,我不明白问题4。
看这个链接。我希望它可以帮到你。