Анти-шаблоны следуют стратегии в противоположность предопределенным шаблонам дизайна. Стратегия включает в себя общие подходы к общим проблемам, которые могут быть формализованы и могут рассматриваться как хорошая практика развития. Обычно анти-паттерны противоположны и нежелательны. Анти-паттерны — это определенные паттерны, используемые при разработке программного обеспечения, которые считаются плохими практиками программирования.
Важные особенности анти-паттернов
Давайте теперь рассмотрим несколько важных особенностей анти-паттернов.
правильность
Эти шаблоны буквально нарушают ваш код и заставляют вас делать неправильные вещи. Ниже приводится простая иллюстрация этого —
class Rectangle(object): def __init__(self, width, height): self._width = width self._height = height r = Rectangle(5, 6) # direct access of protected member print("Width: {:d}".format(r._width))
Ремонтопригодность
Программа считается ремонтопригодной, если ее легко понять и изменить в соответствии с требованиями. Импорт модуля можно рассматривать как пример ремонтопригодности.
import math x = math.ceil(y) # or import multiprocessing as mp pool = mp.pool(8)
Пример анти-паттерна
Следующий пример помогает в демонстрации анти-паттернов —
#Bad def filter_for_foo(l): r = [e for e in l if e.find("foo") != -1] if not check_some_critical_condition(r): return None return r res = filter_for_foo(["bar","foo","faz"]) if res is not None: #continue processing pass #Good def filter_for_foo(l): r = [e for e in l if e.find("foo") != -1] if not check_some_critical_condition(r): raise SomeException("critical condition unmet!") return r try: res = filter_for_foo(["bar","foo","faz"]) #continue processing except SomeException: i = 0 while i < 10: do_something() #we forget to increment i
объяснение
Пример включает демонстрацию хороших и плохих стандартов для создания функции в Python.