我想辦法找到如何確保,如果域模型對象被創建它是有效的,以滿足所有的業務規則,例如含義:驗證域模型
- 客戶提供了有效聯繫地址
- 地址由所有必填字段的
- 等等
我有一個想法,以對每個領域對象模型自己的類,它作爲一個驗證器類,用於確認活動該實例有效。
public interface IValidator {
public boolean isValid();
}
簡化的接口實現的插圖ACCOUNTTYPE域模型類:
public final class AccountTypeValidator implements IValidator {
private final AccountType accountType;
public AccountTypeValidator(final AccountType accountType) {
this.accountType = accountType;
}
public boolean isValidName() {
if (StringUtils.isBlank(accountType.getName()) == true) {
return false;
}
return true;
}
public final boolean isValid() {
if (isValidName() == false) {
return false;
}
return true;
}
}
,當我在我的應用程序中使用這個驗證類我可以做類似的東西:
public void setAccountType(final AccountType accountType) {
AccountTypeValidator validator = new AccountTypeValidator(accountType);
if (validator.isValid() == false) {
throw new IllegalArgumentException("....");
}
this.accountType = accountType;
}
優點:
- 定義自己的驗證規則,我所有的域模型
- 驗證所有對象或具體領域我感興趣的
- 得到錯誤的驗證消息顯示領域是什麼無效(和使用它作爲例外,例如描述)
缺點:
- 定義自己的驗證規則應用於所有領域模型
- 當我有很多目標,我需要爲所有的人創造新的對象(例如ACCOUNTTYPE類的實例)(資源消耗)
我相信,沒有必要推倒重來,所以我會喜歡問你是否有什麼東西(圖書館,最佳實踐等)可以用來解決這種情況。我用Google搜索了一下「合同設計」概念的紅色原則,並在這裏找到了一些相應的主題,但我仍然不確定如何解決它的最佳方式。
我想找到最簡單的解決方案,該方案消耗最少的系統資源,易於使用且功能強大,確保域模型對象的有效性。
是否有一個原因是,JSR-303'@ Valid'和相關注釋不會做你需要什麼? – chrylis
沒理由 - 我不知道,我會看看它。 – user2148736