2011-10-05 35 views
1

我有這個接口...如何區分命令模式中邏輯上命名相同的圖層?

public interface ICheckThatDocumentExistsCommand 
{ 
    bool Execute(string userId, string docId); 
} 

在實現中,我只是想驗證這兩個ID和,如果有效,返回其他接口的結果...

public interface ICheckThatDocumentExistsCommand 
{ 
    bool Execute(UserId userId, DocumentId docId); 
} 

我想在同一個業務域程序集中定義接口,但是我很難決定如何區分這兩個(或更多)層。從邏輯上講,如果名稱不同,我認爲它們是相似的,所以我不能將它們放在相同的命名空間下。我是否通過命名空間分開?一個「Validation」命名空間和一個「Something-else」命名空間?還是我擴大已經羅嗦名到的東西有點可笑像...

public interface IValidateIdsAndThenCheckThatDocumentExistsCommand 

我看到這個拿出更多的和我保持功能和小單旨意更多。

回答

1

並不少見使用命令模式的問題。我通常最多可以將命令名保留四到五個字,但偶爾需要更長的時間。

我看到兩個接口具有相同名稱的頭痛:

  1. 任何類引用兩個組件必須使用完全合格的類名。
  2. 源代碼控制讓頭腦中的文件頭暈(我現在正在合併哪一個?),假設你的文件名與你的類名匹配。
  3. GoTo鍵入resharper將始終需要一個額外的步驟。

我同意第一個界面所做的額外工作應該反映在名稱中。你的建議可行,但你可以將它縮短到像

IValidateIdsAndCheckForDocumentCommand 

這不是太長。 :)

+0

謝謝你清理我的頭,並提醒我額外的工作值得肯定。對於這種簡單的情況,我想我會採用你建議的名字。謝謝你。 – StarTrekRedneck

2

那麼,它的實現類是搞清楚什麼與PARAMS做....所以爲什麼不讓實現類確定和驗證類型....

public interface ICheckThatDocumentExistsCommand 
{ 
    bool Execute<t1,t2>(t1 userID, t2 docId); 
} 
+0

引用一個有趣的解決方案,我會一直跟我+1。然而,現在我想到了,它們的類型完全不同,可能僅僅是巧合。在另一種情況下,簽名可能是相同的。這使我進一步朝着命名解決方案邁進。 – StarTrekRedneck

1

我喜歡蒂姆斯的回答,因爲它很聰明,我喜歡托馬斯的回答,因爲他顯然知道領土。

如果是我,我很可能會使用不同的名稱空間。

+0

我越想越多,我越喜歡命名空間解決方案,因爲它爲不同的自定義返回類型,參數類型,支持接口等提供了一個家。我一定會使用這個,所以+1。然而,對於一個非常小的問題領域,我認爲最簡單的事情是適度的名稱變更。 – StarTrekRedneck