gpt4 book ai didi

repository - 领域驱动设计 - 作为存储库或服务的外部数据 API

转载 作者:行者123 更新时间:2023-12-02 17:27:46 26 4
gpt4 key购买 nike

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

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

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

它的设计是否最好,以便 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,但是我似乎找不到任何如何实现此类事情的示例。

最佳答案

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

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

帖子有一个标签列表。

问题:

1:我还了解到,让域实体与域服务进行对话并不是一个好的做法。这是真的吗?

是的,这不是一个好的做法。您的实体不想与域服务耦合。如果您这样做,那么以后就无法重复使用它们。您是否考虑过触发领域事件?您可以告诉您的服务域执行某些触发域事件的操作。

<强>2。 : 通过工厂创建方法获取PostServices域服务的引用可以吗?例如..IPostService PostService = ServiceUtil.GetPostService();返回 PostService.GetTags(Post.content);

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

3:域服务耦合到第三方API是否可以接受?

我不推荐你这样做,但这是可以接受的。

抱歉,我不明白问题 4。

查看此链接。希望对您有帮助。

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

关于repository - 领域驱动设计 - 作为存储库或服务的外部数据 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2272601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com