11

在使用域驱动设计开发的博客应用程序中,“帖子”实体具有相关的标签实体集合。

在创建帖子(例如从 UI 填充对象)时,我想通过 REST 调用第三方 API,该 API 获取帖子的内容并提取语义标签(链接文本)以进行关联。

主要问题:设计这个的最佳方法是什么......

最好的设计是让 Post 实体调用域服务,例如 PostServices.GetTags(Postcontent) 传递其内容并检索标签列表。?

** PostServices.GetTags 将通过进一步的包装类与 REST API 连接。

还是应该将第三方 API 包装为存储库?

函数 Post.GenerateTags() 是否应该根本不存在于域实体中?

进一步的问题

1:我还读到,让域实体与域服务对话并不是一个好习惯。这是真的?

2:是否可以通过工厂创建方式获取PostServices域服务的引用。例如..

IPostService PostService = ServiceUtil.GetPostService(); 返回 PostService.GetTags(Post.content);

3 : 将域服务与第三方 api 耦合是否可以接受?

4:领域实体是否应该只知道如何处理通过调用 REST API 的应用层接收到的标签。

慢慢地试图让我的头脑围绕 DDD,但是我似乎找不到任何关于如何实现这种事情的例子。

4

1 回答 1

4

在博客应用程序中,帖子是实体,标签是值对象。标签没有身份。你应该有:

  • 帖子存储库
  • 帖子(实体)
  • 标签(值对象)

一个帖子有一个标签列表。

问题:

1:我还读到,让域实体与域服务对话并不是一个好习惯。这是真的?

是的,这不是一个好习惯。您的实体不想与域服务耦合。如果你这样做了,那么你以后就不能再使用它们了。您是否考虑过触发域事件。你可以告诉你的服务域做一些触发域事件的事情。

2.:是否可以通过工厂创建的方式获取PostServices域服务的引用。eg.IPostService PostService = ServiceUtil.GetPostService(); 返回 PostService.GetTags(Post.content);

是的,这是可能的。工厂方法可以返回抽象类或接口。这是一个很好的软件设计原则“代码到接口而不是实现”。如果您这样做,您将能够稍后更改您的实现,并且您不必更改您的客户端代码。

3 : 将域服务与第三方 api 耦合是否可以接受?

我不建议你这样做,但这是可以接受的。

对不起,我不明白问题 4。

看这个链接。我希望它对你有帮助。

https://stackoverflow.com/questions/901462/ddd-where-is-it-most-appropriate-to-get-a-list-of-value-objects/901562#901562

于 2010-02-16T17:41:21.230 回答