在java程序上保持课程这是一个好方法吗?

时间:2014-07-28 17:04:36

标签: java jgit

我正在用JGit做点什么

情况是这样的。

用户将打开一个git存储库并以各种方式使用它。

在程序中,此存储库包含Repository类中的信息,各种函数将通过调用它来访问此存储库。这个存储库最初是由构建器构建的。

FileRepositoryBuilder builder = new FileRepositoryBuilder();
        Repository repository = builder.setGitDir(new File(repodir))
            .readEnvironment() // scan environment GIT_* variables
            .findGitDir() // scan up the file system tree
            .build();

在制作程序时,我认为我应该通过该程序打开并使用该存储库。我有一个想法,让这样的类保持当前打开的存储库

public class CurrentRepo{

    private static Repository repository;

    public static Repository getRepository(){
        return this.repository;
    }

    public static void setRepository(Repository repository){
        this.repository = repository;
    }
}

在此之后我会打电话给

CurrentRepo.getRepository()

获取已打开的存储库的信息。

这会导致问题吗?这是一个坏方法吗?

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

通常,我会说使用静态字段来存储这样的信息是可以的。但是,如你所说

  

我应该通过程序

打开并使用此存储库

这个问题是:您是否可能运行在同一个JVM中运行的程序的多个实例,而这些JVM中有不同的存储库被打开?如果是这种情况,则应避免使用静态字段(也称为全局变量)来存储此信息。尝试在程序中识别一个类,它可以将您的信息存储为程序状态的一部分,该状态与程序一样长,而不像JVM那样长。您仍然可以使用包含当前打开的存储库中所有信息的CurrentRepo类,但不应将此信息存储在静态字段中。