gpt4 book ai didi

language-agnostic - 在 View 中显示数据的 DDD 和优化

转载 作者:行者123 更新时间:2023-12-04 06:05:47 26 4
gpt4 key购买 nike

这是许多基于 Web 的项目中的常见要求:一个实体必须向另一个相关实体显示信息。例如,电子商务网站上的一本书必须显示有关其作者的相关信息。

假设我将书籍和作者建模为一个实体,我应该如何实现在同一页面上显示书籍及其作者信息的功能。

  • 我可以调用 BookRepo 来检索图书信息,然后调用 AuthorRepo 来检索作者,使用图书实体中的 authorid。这是 2 个查询
  • 我可以编写一个查询,将 Book 和 Author 表连接在一起,并在 1 个查询中检索这两个信息。但是这个查询去哪个 repo ?这是否会破坏 DDD,因为我假定有关 Book 和 Author 实体的详细信息?

哪些是“最佳实践”,还有哪些其他方法可以解决这个问题?

(我假设使用标准 SQL 查询 [例如 PHP + MySQL],因为在 EF 4 中您将定义 Book 和 Author 之间的关联,这将很容易地解决问题)。

最佳答案

对此没有银弹解决方案,但您有几个选择。

您提出的第一个调用两个存储库的解决方案是完全有效的,并且在实践中一直存在。例如,它需要一百多种不同的服务来呈现亚马逊产品页面。每个服务负责提供特定于其有界上下文的数据。您可以创建一个名为 BookService 之类的服务,它调用两个存储库以返回一个报告对象或一个包含特定 View 所需的所有数据的 DTO。如果您认为性能是由于两次存储库调用将成为一个问题,您可以使用缓存或 CQRS 来创建适当的读取模型,但不要过早地跳到这些解决方案。

但是这个查询去哪个 repo?我只是将它添加到 BookRepository,或者甚至是一个名为 BookDetailsReportingRepository 的全新存储库,也许是一个名为 GetBookDetails 的方法。此方法不会返回可编辑的实体,而是返回一个报告对象,该对象是来自多个实体的值的投影。

这是否会破坏 DDD,因为我假设了有关图书和作者实体的详细信息?这并不违反 DDD,而且在我看来它更容易应用。将上述存储库返回的数据视为报告对象,而不是实体。

关于language-agnostic - 在 View 中显示数据的 DDD 和优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8383615/

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