让我们从一个例子开始。
比方说,我有一个称为方法export
,该方法在很大程度上取决于数据库架构。“严重依赖”是指我知道(经常)向特定表中添加新列会导致相应的export
方法更改(通常也应将新字段也添加到导出数据中)。
程序员通常会忘记更改export
方法,因为还不清楚您是否应该看一下。我的目标是迫使程序员明确决定是否要忘记查看该export
方法还是只是不想在导出数据中添加字段。我正在寻找针对此问题的设计解决方案。
我有两个想法,但它们都有缺陷。
智能的“阅读所有”包装
我可以创建智能包装器,以确保显式读取所有数据。
像这样:
def export():
checker = AllReadChecker.new(table_row)
name = checker.get('name')
surname = checker.get('surname')
checker.ignore('age') # explicitly ignore the "age" field
result = [name, surname] # or whatever
checker.check_now() # check all is read
return result
因此,checker
断言if是否table_row
包含另一个未读取的字段。但是,所有这些东西看起来有点沉重,并且(可能)会影响性能。
“检查该方法”单元测试
我可以创建一个能够记住最后一个表模式的单元测试,并且每次更改表时都会失败。在那种情况下,程序员会看到类似“不要忘了检查export
方法”的信息。要隐藏警告程序员,可以(或不会-这是一个问题)签出export
并手动(这是另一个问题)通过在其中添加新字段来修复测试。
我还有其他一些想法,但是它们太难实现或难以理解(我不希望该项目成为难题)。
上面的问题只是我不时遇到的更多问题的一个示例。我想绑定一些代码和/或基础结构,因此更改其中的一个代码会立即提醒程序员检查另一个代码和/或基础结构。通常,您有一些简单的工具,例如提取通用逻辑或编写可靠的单元测试,但是我正在寻找更复杂情况的工具:也许我现在知道一些设计模式。
export
您是否实际需要的一切,但是您可以自动生成一个测试吗?
export
基于模式生成?