解決代碼壞味道m(xù)iddleman
在Python編程中,Middle Man是一種常見(jiàn)的代碼壞味道,它的主要表現(xiàn)是在一個(gè)對(duì)象和它所依賴(lài)的對(duì)象之間插入了過(guò)多的中間層。這些中間層可能會(huì)增加代碼的復(fù)雜性和冗余性,從而使得代碼難以維護(hù)和擴(kuò)展。 ?以下是幾種常見(jiàn)的解決方案: ?1. 去除無(wú)用中間層 ?在一個(gè)對(duì)象和它所依賴(lài)的對(duì)象之間插入過(guò)多的中間層時(shí),經(jīng)常會(huì)出現(xiàn)一些無(wú)用的中間層。去除這些無(wú)用的中間層可以減少代碼的復(fù)雜性,從而使得代碼更易于維護(hù)和擴(kuò)展。通常,在去除無(wú)用中間層時(shí),可以使用一些簡(jiǎn)單的重構(gòu)方法,例如:去除只傳遞消息的方法、合并僅僅委托給他人的方法、合并僅僅簡(jiǎn)單調(diào)用的方法、把委托給其他對(duì)象的方法直接傳遞給該對(duì)象等。 ?例如,下面是一個(gè)典型的Middle Man代碼塊: class MiddleMan: ??def __init__(self, ob): ????self.ob = ob ??def get_value(self): ????return self.ob.get_value() 在上述代碼中,MiddleMan類(lèi)僅僅是簡(jiǎn)單地委托了它所持有的對(duì)象(ob)的get_value方法。這個(gè)MiddleMan類(lèi)就是一個(gè)典型的中間對(duì)象,可以直接委托給它所依賴(lài)的對(duì)象。下面是一個(gè)去除了Middle Man的實(shí)現(xiàn): obj = dependentObject response = obj.get_value() 2. 合并中間層 ?如果由于需要將多個(gè)對(duì)象聯(lián)系起來(lái)而出現(xiàn)了過(guò)多的中間層,可以嘗試將它們合并為一個(gè)更簡(jiǎn)單的對(duì)象。通過(guò)這種方式,可以減少代碼的復(fù)雜性,從而使得代碼更易于維護(hù)和擴(kuò)展。 ?例如,下面是一個(gè)典型的Middle Man代碼塊: class MiddleMan: ??def __init__(self, ob1, ob2): ????self.ob1 = ob1 ????self.ob2 = ob2 ??def get_value(self): ????return self.ob1.get_value() + self.ob2.get_value() 在上述代碼中,MiddleMan類(lèi)僅僅是簡(jiǎn)單地將它所依賴(lài)的兩個(gè)對(duì)象(ob1和ob2)的get_value方法的返回值相加起來(lái)。這個(gè)MiddleMan類(lèi)就是一個(gè)典型的中間對(duì)象,可以將它所依賴(lài)的兩個(gè)對(duì)象變成一個(gè)更簡(jiǎn)單的對(duì)象,如下所示: class DependentObject: ??def __init__(self, ob1, ob2): ????self.ob1 = ob1 ????self.ob2 = ob2 ??def get_value(self): ????return self.ob1.get_value() + self.ob2.get_value() ?obj = DependentObject(ob1, ob2) response = obj.get_value() 這個(gè)方法的優(yōu)勢(shì)是減少了中間層的數(shù)量,使代碼更易于維護(hù)和擴(kuò)展。 ?3. 使用依賴(lài)注入 ?在一些情況下,Middle Man存在的原因可能是為了維護(hù)依賴(lài)關(guān)系。在這種情況下,可以使用依賴(lài)注入來(lái)減少M(fèi)iddle Man的數(shù)量。 ?例如,下面是一個(gè)典型的Middle Man代碼塊: class MiddleMan: ??def __init__(self): ????self.ob = DependentObject() ??def get_value(self): ????return self.ob.get_value() 在上述代碼中,MiddleMan類(lèi)僅僅是簡(jiǎn)單地將DependentObject的實(shí)例化和get_value方法的調(diào)用封裝在一起。如果使用依賴(lài)注入,可以將所依賴(lài)的對(duì)象作為類(lèi)的參數(shù)傳入,如下所示: class DependentObject: ??def __init__(self, ob1, ob2): ????self.ob1 = ob1 ????self.ob2 = ob2 ??def get_value(self): ????return self.ob1.get_value() + self.ob2.get_value() ?class MiddleMan: ??def __init__(self, ob1, ob2): ????self.ob = DependentObject(ob1, ob2) ??def get_value(self): ????return self.ob.get_value() ?obj1 = Object1() obj2 = Object2() middle_man = MiddleMan(obj1, obj2) response = middle_man.get_value() 這個(gè)方法的優(yōu)勢(shì)是解耦代碼,使得代碼更易于維護(hù)和擴(kuò)展。 ?總之,Python中的Middle Man是一種在編寫(xiě)代碼時(shí)必須避免的代碼壞味道。使用上述技術(shù),您可以輕松地減少M(fèi)iddle Man的數(shù)量,使代碼更易于理解和維護(hù)。