Wzorce projektowe w Pythonie - Anti

Anty-wzorce są zgodne ze strategią będącą przeciwieństwem predefiniowanych wzorców projektowych. Strategia zawiera wspólne podejście do wspólnych problemów, które można sformalizować i ogólnie uznać za dobrą praktykę rozwojową. Zazwyczaj anty-wzorce są odwrotne i niepożądane. Anty-wzorce to pewne wzorce używane w tworzeniu oprogramowania, które są uważane za złe praktyki programistyczne.

Ważne cechy anty-wzorców

Przyjrzyjmy się teraz kilku ważnym cechom anty-wzorców.

Poprawność

Te wzorce dosłownie łamią Twój kod i powodują, że robisz złe rzeczy. Oto prosta ilustracja tego -

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

Konserwowalność

Mówi się, że program można konserwować, jeśli jest łatwy do zrozumienia i zmodyfikowania zgodnie z wymaganiami. Za przykład łatwości konserwacji można uznać moduł importu.

import math
x = math.ceil(y)
# or
import multiprocessing as mp
pool = mp.pool(8)

Przykład anty-wzorca

Poniższy przykład pomaga w zademonstrowaniu anty-wzorców -

#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

Wyjaśnienie

Przykład zawiera demonstrację dobrych i złych standardów tworzenia funkcji w Pythonie.