【问题标题】:What is the best way to instantiate a class and let it do the work [closed]实例化一个类并让它完成工作的最佳方法是什么[关闭]
【发布时间】:2012-02-03 06:17:31
【问题描述】:

我正在使用一个从注册表单中获取参数的 servlet,我目前正在使用一个 java 类来处理这些参数并将它们存储在数据库中,但我觉得我使用这个类的方式是错的。我的代码是这样的:

UserRegister ureg=new UserRegister(name,age,sex,country);

仅此而已,我在类中的构造函数将通过自己调用 UserRegister 类中的方法来完成从处理数据到将数据存储到数据库中的整个工作。

这是正确的方法,还是有更好的方法?

编辑:我的 UserRegister 类只会对数据进行一些处理,它会调用业务层来存储数据,它本身不会与数据库交互。 我要问的是,当你有一个类在初始化后只需要在其中执行一系列固定的步骤时,应该遵循什么方法

【问题讨论】:

  • 这可能在programmers.stackexchange.com 上问得更好;在 Stack Overflow 上,恕我直言,它被认为是“不具建设性的”。
  • @Brian:感谢您告诉有关programmer.stackexchange.com,我不知道它

标签: java database class servlets constructor


【解决方案1】:

我的类中的构造函数将完成从处理数据到将其存储在数据库中的整个工作

错了。永远不要这样编程。

在初始化它的类的基本必要性后尽快从 c'tor 出来。

UserRegister 对象的创建方法。使用该方法调用 ureg 对象上的方法。

例如:

public void processRequest(name, age, sex, country)
{
    UserRegister ureg=new UserRegister(name,age,sex,country);
    ureg.updateSomeFields();
    ureg.doSomeBusinessLogic();
    ureg.prepareDBData();
    ureg.storeInDb();
}

这只是改进您当前设计的一个示例。但是,您也应该有一些实用程序类。 UserRegister 类应该有代表一个用户的数据和行为,只有一个用户。

设计实用程序类,以便它们以某种格式接受输入,进行一些计算,然后将输出数据返回给它的调用者。所以,当evrprocessRequest方法需要完成工作时,它不会自己做,而是调用另一个方法(它可能在同一个类或其他一些类中)

编辑:

我要问的是,当你有一个类,在初始化之后,里面只需要执行一系列固定的步骤时,应该遵循什么方法

这取决于这些步骤的性质。找出它们之间的关系。它们与用户有关吗?如果是,请将它们作为方法放在 User 类中。如果没有,将相关步骤组合在一起,创建一个具有全名含义的类并使用它。当创建一个单独的类时,尝试以这样的方式设计它们可以用作实用程序,而不仅仅是用于当前目的。

【讨论】:

  • 你的意思是,在创建 UserRegister 对象后,我应该从我的 servlet 方法中调用 UserRegister 类中的方法。好的,但是如果我需要始终以固定顺序调用 UserRegister 类中的方法,那么让 UserRegister 类自己调用这些方法不是更好吗?
  • 以编程方式是可能的,但也要考虑设计。这是UserRegister 班级要完成的任务吗? UserRegister 类中的方法名称是否传达了它将执行的所有步骤。?
  • 想象它们和你上面写的方法一样,那该怎么办呢?
  • BusinessLogic、DBLogic 应该有不同的类。一字解决方案是:MVC.
  • @Azaodious 我目前正在做的是,我的 servlet 将创建一个 UserRegister 对象,该类将负责一些基本处理,此后该类将调用一个静态类,例如 UserAccountsDB将参数存储在数据库中。
【解决方案2】:

【讨论】:

    【解决方案3】:

    我会查看许多 MVC 框架之一,这些框架可用于处理将参数提取到表单中,然后使用业务层进行处理,并使用持久层进行数据库访问。

    查看AppFuse 以了解众多 MVC 框架的示例以及它们如何与其他 Java 框架集成。即使您最终没有使用它,也有一些很棒的视频,说明这些框架组合如何有效地帮助您评估各种技术以创建一个 3 层环境。

    【讨论】:

      【解决方案4】:

      通常最好将功能分解为多个部分。这使您能够单独对每个部分进行单元测试。根据表单的输入创建用户对象。然后调用数据访问层来保存用户。

      阅读 MVC。我个人喜欢 Spring MVC。您可以从对象中的表单获取信息。然后,您使用服务层进行所需的任何转换。从那里你可以持久化用户。

      【讨论】:

        【解决方案5】:

        构造函数主要用于创建对象的初始化任务。我会将存储在数据库中的所有逻辑转移到某些方法中。此外,如果在数据库中存储数据的过程需要大量时间,那么挂在该用户的“线程”上根本不是一个好主意,您可以以异步方式完成工作,Servlet 3 支持异步

        正如其他人所说,Spring MVC 将是一个非常好的地方。

        【讨论】:

          【解决方案6】:

          我不喜欢这种方法。 UserRegister[] ur = new UserRegister[10] 究竟会做什么?如果我有UserRegister ur = readfromDatabase(...)。由于此函数必须创建一个UserRegister 才能返回,因此数据会再次保存到数据库中!?奇怪而混乱。如果我想保存到文件而不是数据库怎么办?

          最好将数据对象的创建与数据持久性分开。

          【讨论】:

          • 数据持久化到底是什么意思?请详细说明您的答案
          • 数据持久化 = 数据存储在内存之外。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-10-27
          • 1970-01-01
          • 2016-10-12
          • 2013-04-28
          • 2010-11-06
          • 1970-01-01
          • 2010-09-27
          相关资源
          最近更新 更多