Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用户输入验证应该在类级还是UI级进行?_Java_Parameters_User Input_Inputverifier - Fatal编程技术网

Java 用户输入验证应该在类级还是UI级进行?

Java 用户输入验证应该在类级还是UI级进行?,java,parameters,user-input,inputverifier,Java,Parameters,User Input,Inputverifier,假设您有一个具有以下功能的控制台应用程序: Main.java和ClassA.java 主类包含运行程序的publicstaticvoidmain(String[]args)方法,它使用用户输入作为参数来调用ClassA中的方法 在将参数发送到ClassA方法之前,是否将用户输入验证放在main方法中 或 您是否将用户输入验证放在ClassA方法中,该方法会将指示输入成功与否的消息中继回来?或者抛出异常 i、 e.Integer.Parse(…)在给定无效输入时抛出NumberFormatExc

假设您有一个具有以下功能的控制台应用程序:

Main.java
ClassA.java

主类包含运行程序的
publicstaticvoidmain(String[]args)
方法,它使用用户输入作为参数来调用
ClassA
中的方法

在将参数发送到
ClassA
方法之前,是否将用户输入验证放在
main
方法中

您是否将用户输入验证放在
ClassA
方法中,该方法会将指示输入成功与否的消息中继回来?或者抛出异常


i、 e.
Integer.Parse(…)
在给定无效输入时抛出
NumberFormatException

您可能希望在classA中抛出有意义的异常,并让主方法决定是否/如何处理这些异常。当您重用类A时,新调用方可能希望做出其他决定

我推荐《清洁代码》一书中的“错误处理”一章(罗伯特·C·马丁)。例如,它说“定义正常流程”、“使用异常而不是返回代码”、“分离业务逻辑和错误处理”

在某些情况下,获得快速反馈很重要。。。不要等待两个小时,等待计算完成,然后得到90%的异常。在其他情况下,更重要的是获得详细的反馈。也看到


检查您的代码是否易于阅读并理解正常流程。每个函数应该只做一件事/建模一个抽象级别。异常处理是一级抽象

输入是来自控制台还是来自“ClassA”中提供的图形用户界面?如果你把班级想象成人。。。谁会“拥有”这些论点?您能想象在另一个具有完全相同参数的上下文中使用ClassA吗?只有ClassA或ClassB和ClassC使用这些参数吗?@Stefan输入来自控制台(非图形用户界面),ClassA仅由“main”方法使用。我认为没有确定的答案。但是采用MVC(模型-视图-控制器)设计方法,验证(在我看来)应该由控制器执行,以确保模型(ClassA)不会收到无效请求。就个人而言,我不认为输入验证是业务逻辑,因此不属于模型中。如果引入控制器,则可以切换到图形视图(而不是控制台),而无需重新实现vaidstion逻辑。由于这可能不是一个问题,我将向您的主类引入验证逻辑。谢谢,我已在UI级别决定确保输入的数据类型正确,以便传递给类方法(即信用卡号实际上是一个数字)。在类方法中,验证业务逻辑(即,如果信用卡号实际上是一个信用卡号)。您感兴趣的是Mabe commons cli:解析命令行参数的其他选项: