我處於項目的設計階段,需要對給定對象執行某些驗證。 驗證可以分爲5個不同的組。驗證器的每個類別都可以有多個版本,在其實現中略有不同。基於輸入的不同驗證器
public interface Validator {
boolean validate(Object o);
}
public abstract CostValidator implements Validator {
//common logic related to cost validator
}
public class CostValidator1 extends CostValidator {
boolean validate(Object o) {
//implementation 1
}
public class CostValidator2 extends CostValidator {
boolean validator(Object o) {
//implementation 2
}
根據對象的業務組,需要執行CostValidator1或CostValidator2。
對於每個業務組,我打算在配置系統即維持這種驗證的列表:
BusinessGroupA {
validators = [CostValidator1, SomeOtherValidator2...]
}
BusinessGroupB {
validators = [CostValidator2, AnotherValidator99...]
}
的處理流程將獲取的驗證的列表從配置基於業務組並在每個驗證器中執行驗證。
這種方法有什麼缺陷嗎? 或者有沒有更好的方法來解決我描述的用例?
我想知道在給定要求的情況下是否有更好的設計方法。 由於我的項目正處於設計階段,我想盡可能地探索更多的選擇。 – Rahul
爲什麼驗證邏輯被放入單獨的類中有什麼特別的原因?爲什麼對象無法驗證自己? 'if(!object1.isValid()){...}' –
基於對象所屬的業務組,CostValidator1或CostValidator2或不應用成本驗證。 同樣,屬於組A的對象在管道中可能有3個驗證程序,其中屬於B的對象有5個。 此外,根據將來需要的更改,可以將對象從一個業務組移動到另一個業務組。 該對象將由各種組件執行,實現它們自己的業務邏輯方面。 這裏列出的驗證器屬於一個這樣的邏輯分組。 此外,對象類的代碼基礎遵循更多功能的方法與OO – Rahul