2010-06-09 74 views
0

我有一個名爲PropertyFilter的接口,它曾經接受Property並決定是否接受它。世界很好。命名接口的問題

但是現在界面已更改,因此實施可能會選擇添加其他Property s。例如,Customer屬性可能會擴展爲NameAddress屬性。

我認爲這很明顯,這不是一個過濾器了,但你會怎麼稱呼這樣的事情?

爲了澄清:所謂的過濾器是一個很值得與簽名

Property -> List<Property> 

法用表示空List不接受物業,以準確地輸入屬性,代表接受屬性和列表的列表新的屬性(可能包括原始屬性)表示擴展。

+0

仍然看起來像一個過濾器給我。一個'Filter [T]'通常是一些函數'T - > Boolean',這似乎仍然是。 – 2010-06-09 07:01:38

+0

爲什麼你關心PropertyFilter中的Property?爲什麼不簡單地使用Filter接口? – mathk 2010-06-09 11:28:29

+0

@mathk我們選擇Filter上的PropertyFilter,因爲在我們的代碼庫中已經有兩個過濾器,而我們使用的庫中有兩個過濾器。但問題實際上是名稱的Filter部分。 – 2010-06-09 20:39:19

回答

1
  • PropertyChecker
  • PropertyValidator
  • PropertyDistillator
  • PropertyAccreditor ...

你已經爲你所提到的方法的名字嗎?它可以幫助我們爲界面找到一個合適的名稱。

+0

該方法目前被稱爲'擴展' – 2010-06-21 21:02:26

+0

行,所以界面有驗證和擴展屬性的混合責任。您可以使用更一般的名稱,如PropertyManager或PropertyHandler。 或者,您可以將2個職責分成兩個獨立的類,PropertyValidator和PropertyExpander,其中一個調用另一個類。 我想解決方案取決於客戶端代碼如何使用接口,以及客戶端代碼是否知道驗證方面或擴展方面(或兩者)。 – guillaume31 2010-06-22 13:09:27

0

我不太確定你的新功能是幹什麼的。如果它仍然返回一個布爾值,那麼返回布爾值的函數的另一個名稱是「謂詞」。

如果需要一個Customer並分解它(也許你有一個函數需要一個Customer並返回一個Name,另一個函數返回一個Address),那麼我可以稱它們爲「訪問器」。這個術語通常用來描述一個對象的成員函數,但我認爲它也適用於這裏。

+0

看到我更新的問題,謂詞不適合,我不認爲訪問器適合... – 2010-06-09 20:42:50

0

如果CustomerName和和Address的它已經不再是一個財產,而是實體

Customer財產可能是一個參考Customer實體,在這種情況下,你的接口語義約定仍然適用。

-1

我會添加一個名爲validate方法Property與簽名:

PropertyFilter -> Bool 

validate默認實現通過this(物業)的過濾器,並返回結果:

def validate (filter: PropertyFilter) = filter (this) 

作爲複合財產,Customer覆蓋validate,根據其複合屬性實施它:

override def validate (filter: PropertyFilter) = name.validate (filter) && address.validate (filter) 

這樣,每個Property可以描述如何應用任何給定PropertyFilter自己。我認爲你應該避免使用List擴展方法。