getOrCreate 函数是好做法还是坏做法?
在我的代码(假设)中,我想使用getOrCreate函数。我传递参数,我要么获取新实体,要么从数据库中获取现有实体(如果存在此类实体)。
从一个角度来看,这是一个错误的方法,因为函数不应该做多于一件事。但从另一个角度来看,这是一个单一的操作,只是在英语中没有一个合适的单词,我可以减少代码中的一些重复。
那么,使用这种方法是好的做法还是坏的做法呢?为什么呢?
在我的代码(假设)中,我想使用getOrCreate函数。我传递参数,我要么获取新实体,要么从数据库中获取现有实体(如果存在此类实体)。
从一个角度来看,这是一个错误的方法,因为函数不应该做多于一件事。但从另一个角度来看,这是一个单一的操作,只是在英语中没有一个合适的单词,我可以减少代码中的一些重复。
那么,使用这种方法是好的做法还是坏的做法呢?为什么呢?
这是一个 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描述)。如果你不能写一个简单的陈述性句子来描述你的方法的功能,那么你的方法可能太复杂了。
这取决于许多因素。例如,您可以为某些表保留本地缓存。现在,如果您在该表上调用getOrCreate(someValue),那么您将不得不知道您是创建了它还是只是检索了它。因为您可能需要刷新并重新加载缓存(通过执行另一个读取操作)。
您可能还有其他依赖项,这些依赖项可能会在以后导致重大问题。
虽然我并不完全说这是一种不好的做法,但我认为最好将你的担忧分开。
你可以做这样的事情 ——
if(searchForRecord()==null)
{
addRecord();
}
这种方法的优点:您将始终知道系统的状态和行为(正在发生的事情)。
单例模式是完全不同的事情。你总是得到.该对象的创建在内部处理,并且是单例类的私有。ONLY ONE OBJECT
You DONT need to know whether you get a new object or the old one because it doesn't matter to you