复杂查询的设计模式

3
我们目前正在开发一款大量使用PostgreSQL的应用程序。在大多数情况下,我们使用SQLAlchemy来访问数据库,这非常有效。对于测试,相关对象可以模拟或在没有数据库访问的情况下使用。但是,系统中有一些运行非标准查询的部分。这些子系统必须创建临时表并插入大量行,然后将数据合并回主表。
目前,这些子系统中有一些SQL语句,但这会使相关类与数据库紧密耦合,从而使单元测试变得更加困难。
基本上我的问题是,是否有任何设计模式来解决这个问题?我能想到的唯一方法是将这些SQL语句放入一个单独的类中,并将一个实例传递给其他类。这样,我就可以为单元测试模拟查询类,但它仍然感觉有点笨拙。有更好的方法吗?
1个回答

0

所以在进一步尝试后,我现在有了一个还算不错的解决方案。我将需要的类分成了三个独立的类:

  • 提供所需数据访问的类;
  • 支持临时表操作的上下文管理器;
  • 旧类中所有逻辑(除了数据库相关内容)。

当我实例化我的逻辑类时,我会向它提供前面提到的这些类的实例。它可以工作,抽象略微泄漏(特别是上下文管理器),但现在我至少可以正确地对逻辑进行单元测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接