getOrCreate 函数是好做法还是坏做法?

2022-09-03 15:44:44

在我的代码(假设)中,我想使用getOrCreate函数。我传递参数,我要么获取新实体,要么从数据库中获取现有实体(如果存在此类实体)。

从一个角度来看,这是一个错误的方法,因为函数不应该做多于一件事。但从另一个角度来看,这是一个单一的操作,只是在英语中没有一个合适的单词,我可以减少代码中的一些重复。

那么,使用这种方法是好的做法还是坏的做法呢?为什么呢?


答案 1

这是一个 get 函数。您将获得该类的一个实例。

对于外部世界来说,get函数在内部如何工作并不重要。

    public Object getObject(int key) {
        Object object = getObjectFromDatabase(key);
        if (object == null) {
            object = createObject(key);
            writeObjectToDataBase(key, object);
        }
        return object;
    }

每个方法都有一个函数。

编辑以添加:有些人从内到外查看方法。这就是在为该方法编写代码时需要执行的操作。我意识到我的getObject方法必须做几件事才能真正获得一个对象。

但是,在命名方法时,可以从外部查看方法。这就是为什么我的getObject方法“获取一个对象”(相当短的Javadoc描述)。如果你不能写一个简单的陈述性句子来描述你的方法的功能,那么你的方法可能太复杂了。


答案 2

这取决于许多因素。例如,您可以为某些表保留本地缓存。现在,如果您在该表上调用getOrCreate(someValue),那么您将不得不知道您是创建了它还是只是检索了它。因为您可能需要刷新并重新加载缓存(通过执行另一个读取操作)。

您可能还有其他依赖项,这些依赖项可能会在以后导致重大问题。

虽然我并不完全说这是一种不好的做法,但我认为最好将你的担忧分开。

你可以做这样的事情 ——

if(searchForRecord()==null)
 {
  addRecord();
 }

这种方法的优点:您将始终知道系统的状态和行为(正在发生的事情)。

单例模式是完全不同的事情。你总是得到.该对象的创建在内部处理,并且是单例类的私有。ONLY ONE OBJECTYou DONT need to know whether you get a new object or the old one because it doesn't matter to you


推荐