反模式遵循與預(yù)定義的設(shè)計(jì)模式相反的策略。 該策略包含共同問(wèn)題的常見方法,可以將其形式化,并且可以被普遍視為一種良好的開發(fā)實(shí)踐。 通常情況下,反模式是相反的并且是不可取的。 反模式是軟件開發(fā)中使用的某些模式,被認(rèn)為是不好的編程實(shí)踐。
現(xiàn)在我們來(lái)看看反模式的一些重要特征。
正確性
這些模式從字面上破壞代碼,并讓你做錯(cuò)事。 以下是對(duì)此的簡(jiǎn)單說(shuō)明 -
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))
可維護(hù)性
如果程序易于理解和根據(jù)要求進(jìn)行修改,則稱該程序是可維護(hù)的。 導(dǎo)入模塊可以被認(rèn)為是可維護(hù)性的一個(gè)例子。
import math
x = math.ceil(y)
# or
import multiprocessing as mp
pool = mp.pool(8)
反模式示例
以下示例演示如何實(shí)現(xiàn)反模式 -
#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
說(shuō)明
這個(gè)例子包括了在Python中創(chuàng)建函數(shù)的好的和壞的標(biāo)準(zhǔn)的演示。