2010-12-13 66 views
1

如果我有以下的通用接口:我應該使用接口來強制執行泛型嗎?

public interface IValidator<T> 
    { 
     Boolean IsValid(T entity_); 
    } 

我可以通過以下方式使用它呢?這是否違反面向對象的編程指南?

public PathValidator : IValidator<String> 
    { 
    } 
+0

爲什麼要這樣呢? – Heinzi 2010-12-13 15:15:36

+0

完美無瑕。看看像IComparable這樣的接口。 – riwalk 2010-12-13 15:16:47

+0

adam,這有點類似於我前些日子給你提出的建議/建議界面。我認爲你很好採用這種方法100% - 哈哈http://stackoverflow.com/questions/4399447/generic-method-cannot-implicitly-convert-type-string-to-t/4399490#4399490 – 2010-12-13 15:59:31

回答

6

是在使用接口的反對任何形式的最佳實踐?

不,這很好,很普遍(假設你的接口不是空的,並且有一個方法簽名,如bool IsValid(T entity))。

是什麼讓你覺得它應該是?如果你讓我們知道,我們可以詳細說明。

+0

是的,我有基本上沿着bool isValid(T實體)的線條。 我認爲這可能違背了大多數人會做的事,因爲我在類的定義中指定了類型。我認爲這可能會讓你認爲通用接口是無用的。 – adamwtiko 2010-12-13 15:17:27

+0

@Adam Witko:好吧,考慮一下替代方案:'interface IStringValidator {bool IsValid(string s); }','interface IFooValidator {bool IsValid(Foo f); ''等等,是否更好? – jason 2010-12-13 15:22:21

+0

我不得不說可能不是! – adamwtiko 2010-12-13 15:23:22

0

因爲不是,只要看看像IList這樣的通用集合接口。

0

如果這實際上是接口的主體,那麼擁有沒有契約的接口(也就是說,它不需要實現任何方法)通常不是一個好主意。通常這提示您的設計存在問題。

0

空接口(標記接口)通常是不好的做法,因爲您應該使用Attribute來代替。

但是,如果它只是空的,因爲您省略了它來簡化示例,那麼它對我來說看起來非常好。