Как называется шаблон проектирования, используемый этим кодом проверки? - PullRequest
0 голосов
/ 25 сентября 2019

Мне было удобно реализовывать проверку непосредственно в классах повышенных исключений, таких как:

>>> 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

Шаблон, о котором я спрашиваю, это встраивание процедуры проверки в класс исключений, которыйповышается, если проверка не пройдена .Поскольку я пытаюсь использовать принцип единой ответственности в своем коде, мне нужно иметь отдельное исключение для каждого сбоя, которое затем может быть преобразовано в сообщение на произвольном естественном языке отдельным модулем.Следование шаблону позволяет мне хранить весь мой код проверки в одном месте.

Поскольку под солнцем нет ничего нового, я думаю, кто-то уже изобрел этот шаблон класса проверки-исключения.Как его тогда назвать, чтобы я мог говорить с другими питонистами, чтобы понять?

Кроме того, каковы возможные недостатки этого шаблона проектирования?

1 Ответ

0 голосов
/ 26 сентября 2019

Скорее всего, это соответствует дизайну по контракту , поскольку ваш код действует как охранник .

Это не столько шаблон проектирования, но скорееклассифицируется как защитное программирование .

У меня есть кое-что подобное , которое я использую в пространстве .Net.

На самом деле не должно быть никаких недостатковпоскольку вы гарантируете, что ваш код будет работать так, как ожидается.

...