数据验证有什么问题——以及它与里氏替换原则的关系

主要观点:在软件开发中,工程师常纠结是否需再次验证数据,这导致性能与安全间的矛盾,代码难维护且易出错,此问题从设计角度与违反里氏替换原则(Liskov Substitution Principle,LSP)的架构问题相关。
关键信息

  • 数据验证常导致重复或遗漏,影响性能和产生歧义,引发系统脆弱。
  • 验证责任的模糊导致 LSP 违反,方法声称接受父类但实际仅适用于子类。
  • 可在类型系统中显式建模有效性,如定义表示已通过验证的子类型,如ValidatedInput,转移验证责任,消除冗余验证和不安全假设。
  • 以文件访问为例,不同的File类型表示不同的有效性状态,引入ReadableFile等类型可避免重复检查和边缘情况。
    重要细节
  • 介绍在日常软件开发中工程师对数据验证的困惑,如代码中部分进行验证以防万一,部分则信任输入。
  • 详细阐述 LSP 及其违反情况,如示例中processValidObject方法对ParentChild的处理。
  • 说明通过定义子类型ValidatedInput来实现有效性建模,如在处理文件时引入ReadableFile类型。
  • 强调提升有效性至类型级别的重要性,如函数无需进行防御性检查,编译器可强制正确性等,且此模式适用于多种语言和范式。
阅读 13
0 条评论