Java 什么';更好:只在JFrame类或其他类中检查输入

Java 什么';更好:只在JFrame类或其他类中检查输入,java,swing,Java,Swing,所以我想知道,假设我有一个JFrame,它有一个检查文本字段等的方法: private void removeFish() throws Exception{ if(ftfNameFish.getText().toString().trim().length() ==0){ throw new Exception("empty name"); } String weight = ftfMinWeight.getText().replace('g',' '

所以我想知道,假设我有一个JFrame,它有一个检查文本字段等的方法:

private void removeFish() throws Exception{
    if(ftfNameFish.getText().toString().trim().length() ==0){
        throw new Exception("empty name");
    }

    String weight = ftfMinWeight.getText().replace('g',' ').trim();    
    if(weight.length()==0)
        throw new Exception("invalid weight");

    weight = ftfMaxWeight.getText().replace('g',' ').trim();    
    if(weight.length()==0)
        throw new Exception("invalid weight");


    dbF.removeFish(new Fish(this.ftfNameFish.getText(), Integer.parseInt(ftfMinWeight.getText().replace('g',' ').trim()), Integer.parseInt(ftfMaxWeight.getText().replace('g',' ').trim()), ftfFirstOccurence.getText()));
    lblMessage.setText("fish removed"); 
}
在JFrame方法removeFish()中忽略字符串等的值,但在类方法(dbF.removeFish)中检查它们,还是两者都检查?或者在调用方法dbF.removeFish之前检查它们就足够了吗?

它是这样的
您可以进行用户界面/表单(客户端)数据验证,也可以不进行
但您必须在后端进行数据验证(服务器、dbF、数据操作之前的任何操作)

由于表单和业务模块位于同一个位置,因此您将忽略UI数据验证,除非出于双重原因您希望CPU继续工作


若它是一个web应用程序,您可以添加客户端(UI/表单)数据验证,以帮助用户和服务器更快地进行检查。但是数据也必须在服务器端(dbF)再次验证。

如果您有这个问题,请自行询问是否需要重复使用常规方法。如果是的话,问你自己是否愿意一直做这一步

这个问题真的不错。大多数验证都使用两种检查,但含义不同

当您在使用类的方法或接口时遇到异常(当您正在编程时),通常会创建异常以提供您缺少的信息或该类需要按预期工作的信息。与程序员的关系更大。你做得太好了

另一方面,当您确保传递给某个方法的值(当使用类的实例时)的类型为X而不是void时。。或者基本上是您需要传递给方法/函数的内容(因为它需要工作的值)。它与验证、检查更为相关。。或者对用户。 在视图中引起更改是很常见的。例如,如果您决定在值不正确的情况下显示红色X

如果您要检查该值并确保其正确,您可以理解它是不需要的。然后,不需要在方法中执行异常,但正确的方法是同时执行这两种操作。然后,如果明天您想使用该方法,并且遇到异常情况,您将知道该方法需要什么。只是读“空名字”

例如,您将对验证进行编程,以确保用户键入正确的值

我不知道我是否正确地解释了我的意思

编辑:正如@user7859067所说,强烈建议在您打算实例化的方法中继续流程之前验证数据。因为这将导致您的应用程序出现bug,崩溃而不知道发生了什么

作为总结。一个很好的方法是将文本框想象为输入。它向函数传递一个值,该函数需要一个数字。 如果让用户传递字符串,则需要实现一种方法,在值传递给函数之前说stop。 如果您只让用户写一个数字,应用程序将工作,但您的函数已经接受了一个没有错误的字符串。您正在对库/函数进行错误管理,该库/函数将失败,因为没有可操作的数字,而编程异常的远程人员将向您提供发生情况的信息。

“你的代码所能控制的一切都是在你的代码中。问题是时间。”

从纯面向对象的角度来看,最好将责任隔离到类级别,并封装功能。这个问题太宽泛,无法在这样的背景下回答。一般来说,您需要在模型级别进行某种验证,这并不意味着您不能在更高级别进行额外的验证,但模型级别最终负责确保数据的有效性-例如,如果您知道模型需要一个
int
值,那么您可以验证客户机数据,但是让模型来确定他的值是否在范围内