软件设计:DRY,单一事实来源和数据验证



摘自维基百科关于DRY软件的文章:

DRY原则被描述为"在一个系统中,每一块知识都必须有一个单一的、明确的、权威的表示。"这个原则是Andy Hunt和Dave Thomas在他们的《The Pragmatic Programmer》一书中阐述的。他们非常广泛地应用它,包括"数据库模式、测试计划、构建系统,甚至文档"。

摘自维基百科关于单一真相来源的文章:

在信息系统设计和理论中,正如在企业级实例化的那样,单一真实源(SSOT)是指结构化信息模型和相关模式的实践,这样每个数据元素都只存储一次(例如,在单个表的不超过一行)。到这个数据元素的任何可能的链接(可能在关系模式的其他区域,甚至在远程联邦数据库中)都只能通过引用。

我的问题:如果我正在编写一个数据库应用程序,并且我已经编写了特定的代码来验证用户输入的数据,我会打破DRY和SSoT的原则来定义我的数据库字段的数据类型以最接近地匹配它所期望的数据吗?(与之相反的是,只对每个字段使用文本数据类型。现在,让我们忽略其他潜在的好处(如索引)。

如果您的构建过程使用配置文件为数据库和应用层生成正确的代码,那么您将不会违反DRY原则。

对于应用程序程序员来说,只在应用程序代码级别进行验证是很常见的。这通常是错误的。

例如,您可以使用单个配置文件来生成用于通过web界面进行验证的javascript,生成SQL DDL,并生成用于在数据库级别进行验证的SQL check()约束。

你不能明智地避免在两个执行环境中运行不同的代码。(遗留数据库应用程序可能有几十种不同的执行环境。)dba不必使用您的应用程序代码来更新数据库。其他应用程序代码——您可能没有必要被告知的代码——也不必使用您的应用程序代码。

最新更新