当我第一次开始编程,我编写了一切主要的。但是,我学会了,我试图做到尽可能少在我的 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()?或是有没有银子弹?

谢谢你的时间!

有帮助吗?

解决方案

在我看来,"主要"的相当大的项目应该包含大约3功能的电话:

  • 叫一个初始化功能,设置了所有所需的设置偏好,等等。为应用程序。
  • 启动主要的"控制"的程序
  • 在等待的主要控制器,以终止,然后呼吁终止功能,清除任何东西需要被清了在"主要的"(虽然控制器,将有照顾的大部分清理已经).

任何庞大的应用程序将被分割成块的功能,通常是一些层次结构。主要控制器可能有几个孩子控制器,用于特定的功能。

这样做使得更容易找到具体功能,而分离的关切问题是更好的。

当然,正如其他的答复所述,没有真的没有银弹在软件开发。对于一个简短的项目,我可能会把一切都放在主要的只是让事情和快速运行。我觉得还取决于语言的某些选项可能比其他人更容易在特定的语言。

其他提示

代码中的主要功能:

  • 不能单元的测试。
  • 不能接收的依赖性,通过注射。
  • 不能再使用其它应用程序类似于第一个你写的。

因此码的主要功能:

  • 必须这么简单你很高兴与功能性/系统测试。
  • 必须是负责设置的球滚动的依赖关系使用的所有其他代码(也就是说,主要的行为就像一个超级-工厂创造你的应用程序)。
  • 应该只做的事情,这是特别的方式应用程序的设置(即没有任何代码的测试或演示版本将需要做的完全相同的方式)。

在实践中,这意味着,真正的应用程序没有太多在主要的。玩具的应用程序和一个拍摄计划可能会有相当多在主要的,因为你不打算测试或重新使用它们。

实际上,一些什么,我说,以上为C++特定的。Java主要方法当然可以被称为测试代码或变应用程序。但是他们仍然不采取对象为参数,唯一的命令行参数,因此它们在何种程度上可以被孤立的受测试的,或者表现良好,在条款的重新使用,是相当低的。我猜你可以通过类名称为他们的实例,并使用创建其余的应用程序。

[编辑:有人删除了"C++、Java"标签,这个问题。所以:我说什么上面C++、Java具体。其他语言可以享的主要方式是较特殊,在这种情况下可能没有特别的原因你对待它的专门。]

不管你的船浮筒,因为他们说。 :)你真的应该集中精力使代码简洁,易读和高效的使用需要做到这一点的任何工具。如果权证将大量的代码在主 - 这样做。如果你觉得对象将让事情更有条理 - 走那条路

制作class Main的一个实例,然后调用实例方法Main()其完成所有的工作,就像直接在main方法写的一切,好的。

我会说,这是不是在你的主要功能,但什么是不。根据项目的复杂程度,你会想它分解为功能区,如“数据库功能”,“显示功能”,“高茶与牧师”等。

这是所有关于代码的可读性。别人,谁从来没有见过你的程序之前遇到它,可以拿到第一,它没有一个良好的广义主意?

然后再很容易地看到去哪里挖得更深一些进入机制?

你用做只的处理的逻辑块的每个功能部分?它不必只做一两件事,但它不应该做的所有的加厨房水槽。

细分广告代码的方式,它是由外部源维护。

原因天知道,当谈到面对它时,如果有人能-else-修复bug,这一切都更好=)

作为一个直接回答你的问题,我会把函数调用每一个主要的主要组件,安装,过程和光洁度,使任何人谁看它会如何计划的简要概述作品。然后,他们可以进一步深入,他们应该需要。

看,“主”方法的内容和形式是非常语言和环境相关的。在Java中,每一个类可以具有public static void main()方法,所以这是完全可行的,以具有多于一个的

但现在,让我们来考虑一下这个通过模块化尔格定律:“每一个模块隐藏一个秘密,这秘密的东西,可以改变的。”该所最初被称为模块的“秘密”是交互的过程与操作系统的详细信息:东西喜欢把自己的观点和处理不规则的终端。在Python中,这会导致这样的事情:

def main(args=None):
    #argument processing
    #construct instances of your top level objects
    #do stuff

if __name__ == "__main__":
   try:
      main(Sys.Argv)
   except: # everything
      # clean up as much as you can
   else:
      # normal cleanup, no exceptions

在这里点是,你得到的一切,从环境就可以了,然后调用main()函数;你抓住所有捕获的异常和你做一些智能与他们的程序死掉之前。

我觉得主要方法应该解释,该程序的功能在启动什么。 因此,它可以调用initialzing的方法,但是逻辑应被提取到的方法。

在您的例子,我不会创建Main()方法,但把它放到一个原始

你的程序的设计将决定的形状的“主”。

有了这样说,你的主要功能应该如何,是一个“规则” - 恕我直言 - 一个无感。

请记住,如果有人想获得你的程序是如何工作的想法,他们可能会首先关注的地方是在main(至少我会)。所以,我不认为这是把尽可能少在它尽可能是个好主意。但我要说把尽可能少要得到你的程序是如何工作的鸟眼视图。

因此,我认为,在实现主要功能的一个最大关注的应该是可读性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top