簡體   English   中英

哪種方法更適合驗證輸入?

[英]Which approach is better for validating inputs?

我想檢查方法的輸入值,並且我不想編寫這樣的代碼:

void name(String name) {
    if(name != null) {
        //some action
    } else {
        //some another action
    }
}

因此,我可以使用裝飾器模式或注釋。

裝飾器示例:

public interface User {
    void name(String name);
} 

public final class dbUser {
    //ctor...

    void name(String name) {
        //jdbc call for update user name
    }

}

public final class CheckedNullUser {
    private final CheckedNullUser user;

    public CheckedNullUser(User user) {
        this.user = user;
    }

    void name(String name) {
        String inputName = "Some default value";

        if(name != null) {
            inputName = name;
        }

        return user.name(inputName);
    }

}

注釋示例:

public interface User {
    void name(@NotNull String name);
} 

public final class dbUser {
    //ctor...

    void name(@NotNull String name) {
        //jdbc call for update user name
    }

}

哪種方法更好? 存在更好的方法?

哪一個更好? 這將取決於您的要求和應用程序的行為。

使用裝飾器模式會生成其他幾個對象,僅用於驗證,因此垃圾收集器需要做更多的工作。 (如果您的應用程序生成了太多的這些對象,您可能會開始看到“停止世界”垃圾收集器的執行,這將導致凍結)。

使用注釋(Bean驗證-JSR 349)利用了反射,因此,如果您的應用程序具有接近實時的要求,則可能會減慢速度。

從這2個代碼中,我特別喜歡Annotations方法,因為代碼變得更易於理解,並且更容易找到將在每個字段上執行的檢查。

https://docs.jboss.org/hibernate/validator/5.1/reference/en-US/html/index.html

現在,關於其他方法,您可以創建一個僅包含單個方法的標記器接口,例如:

boolean validate() throws ValidationException

然后,您的對象應實現此接口,並且在運行對象之前,請調用validate方法,該方法執行所需的所有檢查。

@NotNull注釋本身並沒有做任何事情。 這不是處理null檢查的方法。 這是制作文檔的一種方式。 此外,大多數IDE都會通知您有關潛在的空指針錯誤的信息。 當涉及空檢查處理時,您應該看一下這個問題鏈接 在業務方面-與邏輯相關的驗證我想您最好先檢查一下。 如果邏輯太復雜,則可以創建一些輔助服務來處理它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM