当我第一次开始编程时,我在main中编写了所有内容.但是据我所知,我试图在我的main()
方法中尽可能少地做.
但是你在哪里决定让其他班级/方法有责任接管该计划main()
?你怎么做呢?
我已经看到很多方法,像这样:
class Main { public static void main(String[] args) { new Main(); } }
还有一些像:
class Main { public static void main(String[] args) { GetOpt.parse(args); // Decide what to do based on the arguments passed Database.initialize(); MyAwesomeLogicManager.initialize(); // And main waits for all others to end or shutdown signal to kill all threads. } }
应该和不应该做什么main()
?或者没有银子弹?
谢谢你的时间!
主要功能中的代码:
不能进行单元测试.
无法通过注入接收依赖项.
不能被其他类似于您编写的第一个应用程序重用.
因此主函数中的代码:
必须如此简单,以至于您只对功能/系统测试感到满意.
必须负责为所有其他代码使用的依赖项设置滚动(也就是说,主要行为就像创建应用程序的超级工厂).
应该只做与您的应用程序设置方式相关的事情(即不是测试代码或演示版本需要以完全相同的方式执行的任何操作).
在实践中,这意味着真正的应用程序主要没有多少.玩具应用程序和一次性程序可能主要有很多,因为您无论如何都不打算测试或重复使用它们.
实际上,我上面提到的一些内容是C++特有的.Java主要方法当然可以通过测试代码或变体应用程序调用.但是它们仍然不将对象作为参数,只使用命令行参数,因此它们在测试中被隔离的程度或在重用方面表现良好的程度非常低.我猜你可以为它们传递类名来实例化并用来创建应用程序的其余部分.
[编辑:有人从这个问题中删除了"C++,Java"标签.所以:我上面说的是C++和Java特有的.其他语言可能会以不太特殊的方式对待main,在这种情况下,您可能没有特别的理由特别对待它.
在我看来,一个大型项目的"主要"应该包含大约3个函数调用:
调用初始化函数,为应用程序设置所有必需的设置,首选项等.
启动应用程序的主"控制器"
等待主控制器终止,然后调用终止功能,清除需要在"主"中清理的任何东西(尽管控制器已经处理了大部分清理工作).
任何相当大的应用程序都将分为多个功能块,通常具有一些层次结构.主控制器可以具有多个用于特定功能的子控制器.
这样做可以更容易地找到特定功能,并且关注点分离更好.
当然,正如其他回复所说,软件开发中确实没有银弹.对于一个简短的项目,我可能会将所有内容都放在主要内容中,以便快速启动并运行.我认为还取决于语言 - 某些选项在特定语言中可能比其他选项更容易.