我開發的類管理與外部資源的連接。其職責是閱讀從給定的來源憑證,並返回身份驗證的連接,如:如何重構類似的方法?
def get_svn_connection(self):
username, pwd=self.get_credentials("SVN")
client=self.get_svn_client(username, pwd)
return client
def get_db_connection(self):
username, pwd, url, schema=self.get_credentials("DB")
client=self.get_db_client(username, pwd, url, schema)
return client
今天我遇到了新的使用案例:有時用戶需要只得到憑據沒有連接。所以,按照目前的解決方案,我必須創建方法get_svn_credentials
,get_db_credentials
等等。它看起來很冗餘,所以我想重構這個結構。 我的想法是:
爲每個連接類型創建子類,併爲他們每個人的定義方法
get_connection
和get_credentials
。問題是:1)我想要一個班級來統治所有的連接; 2)我將不得不使用多繼承(可能在Python,但不會在工作,例如,Java的 - 如果我將滿足未來這個問題)創建方法
get_connection(type)
和get_credentials(type)
和每一個已知字符串指定的連接類型返回相應的實例。問題是我必須創建一個在OOP中認爲不好的開關。使用元編程爲每種連接類型生成方法。不明顯,特定於Python。
您會如何設計?
您已經有了'get_credentials(類型)',你爲什麼認爲'get_connection(type)'會讓事情變得更糟? – Goyo
@Goyo,它是簡化的代碼。實際上,它被稱爲'get_credentials(「SVN」,[「USERNAME」,「PASSWORD」])'',因此它搜索SVN_USER和SVN_PASSWORD。這是私人功能,沒有計劃用於外部使用。 – fresheed
然後你寫的問題就是誤導。無論如何,我認爲你應該選擇最適合用戶需求的API,然後實施它。 – Goyo