【问题标题】:What is the name of the design pattern used by this validation code?此验证代码使用的设计模式的名称是什么?
【发布时间】:2020-01-25 23:54:10
【问题描述】:

我发现直接在上升的异常类中实现验证很方便,例如:

>>> class IsNoneError(ValueError):
...     @classmethod
...     def validate(cls, value):
...         if value is None:
...             raise cls
... 
>>> IsNoneError.validate(1)
>>> IsNoneError.validate(None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in validate
__main__.IsNoneError

我要问的模式是将验证例程嵌入到异常类中,如果验证失败则引发该异常类。当我尝试在我的代码中使用单一责任原则时,我需要为每个失败设置一个单独的异常,然后可以通过单独的模块将其转换为任意自然语言的消息。 遵循该模式可以让我将所有验证代码放在一个地方。

由于太阳底下并没有什么新鲜事,我猜有人已经发明了这种异常验证器类模式。那么它的名字是什么,我可以用它来和其他pythonists交谈来理解?

另外,这种设计模式有哪些可能的缺点?

【问题讨论】:

    标签: python exception design-patterns terminology


    【解决方案1】:

    这很可能适合design by contract,因为您的代码充当guard

    与其说是一种设计模式,不如说它可以归类为defensive programming

    我在 .Net 空间中使用了 similar

    确实不应该有任何缺点,因为您正在确保您的代码按预期执行。

    【讨论】:

    • 确实,我使用类似(更复杂)的代码进行防御性编程,但我询问的设计模式是异常类本身的验证实现。请查看已编辑的问题。
    猜你喜欢
    • 2015-07-25
    • 2017-01-18
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多