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

标签 design-patterns

我一直在尝试通过阅读 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/

    相关文章:

    algorithm - 如何像 Excel 一样发现和分析相似的模式?

    java - Twitter的后端功能是什么,它使一个人的推文可以在其关注者中看到

    ios - 将对象/结构传递给 UITableViewCell,或在 configureCell :atIndexPath:? 中配置单元格

    java - 延迟加载的单例 : Double-checked locking vs Initialization on demand holder idiom

    mysql - 在关系数据库中存储树结构的已知方法是什么?

    apache-flex - Flex : How to keep code away from MXML

    validation - 工厂构造函数中的参数验证?

    python - 为什么 __init__() 总是在 __new__() 之后调用?

    java - 库存元素使用的设计模式建议

    design-patterns - Concern 和 Responsibility 的区别(即 SRP 和 SoC 的区别)?