如何理解“在面向對象編程的時候,方法或者函數的參數最好是接口或者抽象類”這句話?

無止境2

一般方法的參數很有可能會發生變化,有可能會增加一個或幾個參數,這樣方法就會不停的改,相應的,程序中所有調用這個方法的代碼也必須跟著修改。如果這個方法在很多地方都被調用,那麼修改這些代碼真是個繁瑣的工作。

用接口或抽象類的好處就是,即使增加或減少幾個參數,這個接口或抽象類不用去修改,這樣這個方法的簽名不會發生變化,所以程序中調用此方法的代碼也不用修改。只修改這個接口或抽象類的實現的類即可。

比如說查詢某個用戶的訂單:

List GetOrders(string userId)

{

。。。。。

}


調用的代碼可能是這樣:

string userId = "1111"

var orders = ***.GetOrders(userId);

.....

假如現在需求是通過用戶的名字或地址查詢訂單,則需要修改方法:

List GetOrders(string userId,string userName,string address)

相應的調用代碼也必須修改成:var orders = ***.GetOrders(userId,userName,address);

如果我們開始方法定義成:

List GetOrders(IUser user)

{

。。。。。

}


調用的代碼應該是這樣:

IUser user = GetCurrentUser()

var orders = ***.GetOrders(user);


對IUser接口,可實現不同的User類,比如GuessUser,AdminUser,NormalUser等。


使用的代碼幾乎不用改。


IUser user = GetGuessUser()//GetAdminUser()等等

var orders = ***.GetOrders(user);

上面那句話說的應該就是這個意思了。


程序你好

作為一名python的web開發者(不會PHP),我沒有聽說過這句話,但是,我希望我的一些看法能夠對你有所幫助 。

在做web開發和程序設計的過程中,我經常會遇到一個問題,就是更改參數,開始的時候,我經常就在一個方法或者函數中直接將這個參數給傳進去。

但是,一到要更改參數的時候,我就很煩,總要替換啥的,於是乎,慢慢的就習慣建一個配置文件的習慣了,我們需要去用到的直接在配置文件裡面取就行,修改也很方便。

在做web開發的時候,見的比較多的要修改路由的情況,其實,跟上面的類似。不過python裡面的解決方法略有區別。


分享到:


相關文章: