gpt4 book ai didi

design-patterns - 如何使用涉及一对多关系的表数据网关模式?

转载 作者:行者123 更新时间:2023-12-04 20:04:44 24 4
gpt4 key购买 nike

我一直在尝试通过阅读 Martin Fowler 的《企业应用程序架构模式》来了解更多关于设计模式的知识。我遇到了 Table Data Gateway pattern并且想知道如果您有涉及多个表的操作,您将如何使用它?

我的理解是每张 table 都有自己的类。每个类都会有用于访问单个表的 SQL 语句,但是当我的某些语句依赖于其他表时会发生什么?

这是一个具体的例子。如果我有两个表之间的一对多关系,例如 QuestionsChoices (多项选择题),并想检索一个带有所有选项的问题。然后我会有一个 QuestionGateway带有方法的类 find()但我也会有一个 ChoiceGateway带有方法的类 findByQuestionId()检索问题的所有选项?

最佳答案

我建议更灵活地解释这种模式。您不应该仅仅为了与模式定义 100% 兼容而感到受限或做出奇怪的决定。

请不要误会我的意思。我不是建议扔掉模式。我实际上建议的是以适当的方式使用它们。

回答你的问题:

  • 如果您的 ChoiceGateway 之间没有那么多相互依赖的话和 QuestionGateway将它们分开是正常的。
  • 如果存在相互依赖关系,并且最好从业务逻辑的角度“连接”这些表,您可以创建类似“ View ”的东西,称之为 QuiestionView例如。通过这种方式,您的业务逻辑可能会更加清晰,并且所有特定于数据库的内容都将封装在定义的 View 中。

  • 基本上,这都是关于有用的抽象。如果您习惯于独立使用这些表,请定义具有一些潜在重复的独立网关。如果您需要“所有内容都集中在一个地方”,只需定义一些高级 View 抽象即可。

    顺便说一句,模式本身不仅抽象了表格,还抽象了 View 。所以我认为没有理由不能使用定义的方法创建更高级别的抽象。

    A Table Data Gateway holds all the SQL for accessing a single table or view

    关于design-patterns - 如何使用涉及一对多关系的表数据网关模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27179924/

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