1
3類,A包含B,B包含C.所以用戶要使用一些C的服務,有兩種選擇:更少的API或更多的封裝?
首先,更多的封裝:中
class A:
def newMethod(self):
self.b.newMethod()
class B:
def newMethod(self):
self.c.newMethod()
class C:
def newMethod(self):
#do something
pass
a.newMethod()
呼叫服務C直接:
class A:
pass
class B:
pass
class C:
def newMethod(self):
#do something
pass
b = a.b
c = a.c
c.newMethod()
一般來說,我從書本上學到的東西告訴我,第一選擇更好。
但是當C有許多方法暴露給外部用戶時,第二個選擇似乎更合理。在第一個設計中,A和B沒有真正有用。
您會選擇什麼?
當然,一般來說,書會說。 但讓我解釋更多。這不僅是因爲C公開了很多方法,這是因爲還有C1,C2,C3,它們負責爲外部用戶代碼提供服務。 當然,我可以隱藏所有的B,C,C1並向A中添加很多方法,所以用戶代碼看不到我的庫的內部部分 但是,這實際上並沒有意義。 A只是直接向B和其他負責的類傳遞參數。 根據SRP,A應該只有一個責任,A不應該做B或C的工作,它只是讓用戶找到一個地方B – lilyonwind 2009-09-09 13:04:52
隱藏B/C/C1/C2的另一個問題是用戶代碼無法訪問事件的他們。這意味着A從圖書館內部向外部傳送每一個事件,我認爲很多無用的工作。 – lilyonwind 2009-09-09 13:11:11