我從來沒有如此擅長設計,因爲有這麼多種不同的可能性,他們都有優點和缺點,我不知道該去哪。無論如何,這是我的問題,我需要許多不同鬆散相關的類來驗證。但是,其中一些類需要額外的信息來進行驗證。我想要一個方法validate
,可以用來驗證一個對象,我想確定一個對象是否可以通過接口進行驗證,比如Validatable
。以下是我可以擁有的兩個基本解決方案。驗證接口的繼承設計
interface Validatable {
public void validate() throws ValidateException;
}
interface Object1Validatable {
public void validate(Object1Converse converse) throws ValidateException;
}
class Object1 implements Object1Validatable {
...
public void validate() throws ValidateException {
throw new UnsupportedOperationException();
}
}
class Object2 implements Validatable {
...
public void validate() throws ValidateException {
...
}
}
這是第一個解決方案,由此我有一個總的全球界面東西是可驗證的工具,我可以用validate()
來驗證,但Object1不支持此所以它是一種defunc,但對象2不支持它其他許多課程也是如此。
另外,我可以有以下這將離開我沒有頂級界面。
interface Object1Validatable {
public void validate(Object1Converse converse) throws ValidateException;
}
class Object1 implements Object1Validatable {
...
public void validate(Object1Converse converse) throws ValidateException {
...
}
}
interface Object2Validatable {
public void validate() throws ValidateException;
}
class Object2 implements Object2Validatable {
...
public void validate() throws ValidateException {
...
}
}
我想我有主要的問題是,我是那種卡在具有頂層接口,這樣我至少可以說X或Y對象是可驗證的想法。
如果我是做這種方式,那麼我就必須驗證(對象o),然後每一類可確定要傳遞什麼類型的對象吧,但隨後有沒有類型檢查和有效的任何事情可以傳遞給驗證方法,這可能會導致問題。 – 2008-10-08 11:11:33
我不會使用Object,因爲它沒有將信息傳遞給未來的開發人員,因此我將該類型限制爲驗證器對象。我仍然認爲嘗試將通用接口應用於不同的行爲(自我和外部驗證)是有問題的。 – Jean 2008-10-08 11:15:46