Java - 在主类中放入多少逻辑?

时间:2010-02-20 12:10:38

标签: java

你通常在主类中加入多少逻辑?主类中的逻辑应该是最小的,只是实例化其他专用类,并从那里运行所有任务吗?

如果您对此主题(或外部文章)有任何建议,我将不胜感激。

4 个答案:

答案 0 :(得分:10)

对于小工具,我很高兴拥有主类中的大部分或全部逻辑 - 通常可以使用较少的模型。 (对于非常小的工具,我承认我通常不会打扰单元测试。特别是,对于设计方面的东西,如果你正在构建一些东西,那么它的好处就会少于更大的应用程序中的组件。)

对于大型应用程序,主要类别实际上只涉及设置和启动它们。如果您使用的是DI框架,那么代码确实非常少;如果你没有使用依赖注入,那么主类通常充当“手动”依赖注入框架。

答案 1 :(得分:5)

这不是一个关于课程是否是“主要阶级”的问题。这是public static void main(String args[])方法中有多少逻辑的问题。理想情况下,它应包含非常少的逻辑。它本质上应该构造一个或两个对象,然后在这些对象上调用方法。其中一个对象可能是this() - 主类的一个实例,这没关系。

你必须将main()方法放在某处 - 不需要创建一个特殊的类来保存该方法。

作为一般规则,尽量避免在静态方法中使用太多 - 静态方法不能被模拟用于测试。

答案 2 :(得分:4)

  

主类中的逻辑应该是最小的,只是实例化其他专用类,并从那里运行所有任务?

是。理想情况下,main方法及其周围的类应仅用作启动程序的入口点。仅仅存在周围的类只是Java程序组成方式的一个工件(所有必须在某个类中),除了{{之外,没有理由为什么它应该包含其他东西。 1}}方法(但肯定有理由不应该这样做。)

当你将有趣的课程(形成实际课程的课程)分开时,你就会打开各种灵活性的大门。也许其中一些类可以用在其他一些项目中。也许有一天你会想要用更好的实现来替换它们中的一些。也许你会找到一个更好的命令来实例化所有这些类 - 所以只需交换几行。或者如何在并行线程中执行冗长的启动加载和实例化?只需将其中一些包装到合适的Executors即可。祝你在1000多行主要课程中尝试这一点。

这种灵活性对于除了100行基本示例,原型等之外的所有内容都很重要。但鉴于即使是小工具也会增长,为什么不从一开始就正确地做到这一点?

答案 3 :(得分:1)

主要类应该是程序的入口点,因此应该相对较小。但这完全取决于您的实际计划。如果它长50行,那么为它创建两个文件可能会有点过分。

作为示例,请考虑默认的 Swing应用程序框架桌面应用程序,因为它将由NetBeans模板生成,该模板简单而简短,其main()方法是单行启动它:

public class MyApp extends SingleFrameApplication {

    @Override protected void startup() {
        show(new MyView(this));
    }

    @Override protected void configureWindow(java.awt.Window root) {}

    public static MyApp getApplication() {
        return Application.getInstance(MyApp.class);
    }

    public static void main(String[] args) {
        launch(MyApp.class, args);
    }
}