你通常在主类中加入多少逻辑?主类中的逻辑应该是最小的,只是实例化其他专用类,并从那里运行所有任务吗?
如果您对此主题(或外部文章)有任何建议,我将不胜感激。
答案 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);
}
}