OOD - 将配置传递给外部类的最佳方法

时间:2016-02-04 08:46:53

标签: java oop

在我的main方法中,我需要执行系统命令。我正在创建一个外部类来执行命令以保持我的main方法和app类干净。我不确定最好或最干净的方法是在main方法中对命令进行设置,或者只是将类传递给配置阅读器,让它提取所需的必要内容。

如果我只是将外部配置阅读器传递给我的SystemCommand类,是否会使我的应用程序更加紧密耦合或不遵循良好的设计实践?

Ex - 接近一个来设置主方法:

public static void main (String[] args) {

String[] command = { 
    config.getString("program"),
    config.getString("audit.script.name"),
    config.getString("audit.script.config")
    };
String workingDir = config.getString("audit.directory");
SystemCommand runAudit = new SystemCommand(command, workingDir);
runAudit.start();
}

或者,我可以通过传递对配置的引用并让类从中拉出所需的内容来使main方法更简单。看来这种方法在概念上仍然很简单:

public static void main (String[] args) {
SystemCommand runAudit = new SystemCommand(config);
runAudit.start();
}

还需要配置指定输出和日志记录的位置,但我还没想到。

1 个答案:

答案 0 :(得分:1)

简化您的main()方法。您的main()方法不应该了解程序中其他类的内部详细信息。这是因为它是一个入口点,通常入口点应该关注简约初始化和任何其他管家任务。解决您的用例的最佳方法是:

创建一个类SystemCommandFactory,它将Config实例作为构造函数参数,我假设SystemCommand是一个可能有多个实现的接口:

public class SystemCommandFactory
{
     private final Config config;

     public SystemCommandFactory(Config config)
     {
        this.config = config;
     }

    //assume we have a ping system command
    public SystemCommand getPingCommand()
    {
        //build system command
        SystemCommand command1 = buildSystemCommand(); 
        return command;
    }

    //assume we have a copy system command
    public SystemCommand getCopyCommand()
    {
        //build system command
        SystemCommand command2 = buildSystemCommand(); 
        return command;
    }
}

现在你的主要方法就像:

public static void main(String[] args)
{
   SystemCommandFactory factory = new SystemCommandFactory(new Config());

   //execute command 1
   factory.getPingCommand().execute();
   //execute command 2
   factory.getCopyCommand().execute();
}

通过这种方式,您可以看到main()方法简单干净,而且这种设计绝对可以扩展。添加新命令说MoveCommand就像:

一样简单
  1. 为新的SystemCommand接口创建实现 命令。
  2. 在工厂内公开新方法以获取新的MoveCommand
  3. main()中调用此新工厂方法以获取新命令和 在其中调用执行。
  4. 希望这有帮助。