javaarchitecture

Is getOrCreate function a good or a bad practice?


In my code (hypothetical) I'd like to use getOrCreate function. I pass the parameters and I either get a new entity or I get an existing entity from the database, if such entity exists.

From one point of view this is a wrong approach, because function should not do more than one thing. But from another point of view this is a single operation, that just does not have a proper word in English and I can reduce some duplicities in the code.

So is using this approach a good or a bad practice? And why?


Solution

  • It's a get function. You get an instance of the class.

    It doesn't matter to the outside world how the get function works internally.

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

    Every method has one function.

    Edited to add: Some people look at methods from the inside out. That's what you need to do when you're writing the code for the method. I recognized that my getObject method had to do several things to truly get an Object.

    However, when you're naming the method, you look at a method from the outside. Which is why my getObject method "gets an Object" (pretty short Javadoc description). If you can't write a simple declarative sentence describing the function of your method, your method is possibly too complicated.