2017-10-11 98 views
0

假設你有一個控制檯應用程序:用戶輸入驗證應該在課堂級別還是UI級別進行?

Main.javaClassA.java

主類包含在其中運行您的程序public static void main(String[] args)方法,它使用用戶輸入作爲參數的方法調用ClassA

你把用戶的輸入進行驗證的方法main發送參數ClassA方法之前?

OR

你放在ClassA方法用戶輸入驗證這將傳達一個信息,表明輸入的成功與否?或拋出異常?

Integer.Parse(...)當給出無效輸入時拋出NumberFormatException

+0

輸入是來自控制檯還是來自「ClassA」中提供的圖形用戶界面?如果你認爲這些課程是人......誰會「擁有」這些論點?你能想象在另一個上下文中使用完全相同參數的ClassA嗎?是否只有ClassA或ClassB和ClassC使用這些參數? – Stefan

+0

@Stefan輸入來自控制檯(非圖形用戶界面) – NoName

+0

而ClassA只被'main'方法使用。 – NoName

回答

1

您可能希望在classA中拋出有意義的異常,並讓您的主方法決定是否/如何處理這些異常。當您重用類A時,新的調用者可能想要做出其他決定。

我推薦Book CleanCode(Robert C. Martin)的「ErrorHandling」一章。它例如說「定義正常流程」,「使用異常而不是返回代碼」,「分離您的業務邏輯和錯誤處理」。

在某些情況下,獲得快速反饋非常重要...不要等待兩個小時才能完成計算並獲得90%的例外。在其他情況下,獲得詳細的反饋更爲重要。另請參閱Data validation: fail fast, fail early vs. complete validation

檢查是否易於閱讀代碼並瞭解正常流程。每個函數只應該做一件事/模型的一個抽象層次。異常處理是一種高級ob抽象。

+0

謝謝,我已經決定在UI級別確保輸入是正確的數據類型以傳遞給類方法(即信用卡號碼實際上是一個數字)。在類方法中,驗證業務邏輯(即如果信用卡號碼實際上是信用卡號碼)。 – NoName

+0

Mabe commons cli是你感興趣的:http://commons.apache.org/proper/commons-cli/解析命令行參數的更多選項:https://stackoverflow.com/questions/367706/how-to-解析的命令行-參數式的Java – Stefan