2017-10-11 105 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