Best way to handle temporary code implementation in java

Viewed 73

I have an application running on production and I want to do a database level schema change for my application without a downtime (i.e need to migrate old data to the new application also refer this for more information).

To handle the data operations in my application I have a java class like below.

public class MongoDBDataLayerImpl implements <some_class> {
   @Override
   public void addElement(){
       //code to do inserting elements
   }

   @Override
   public void deleteElement(){
       //code to perform deletion
   }
   
   @Override
   public void updateElement(){
       //code to perform update
   }

   @Override
   public void readElement(){
       //code to perform read
   }

   /* Note: I have a many more methods like this in my actual implementation,
            I just added this code for the clarity and simplicity.
   */
}

So in order to do the schema change I'm planning to do plug a temporary change(which should be easily unpluggable) to the above implementation, so that it's supporting both schema models for temporarily.

For this I'm thought of having a status of data migration in the DB side and use it inside my implementation to check, whether I should use new schema model or old model for that particular data.

So there I may need to have similar set of if conditions or switch statements inside the above methods to perform this for example see the below.

@Override
public void addElement(){
    If (migrationStatus == 'migrated'){
        // use new schema
    }
    else if (migrationStatus == 'migrating'){
        //wait for migration completed and recall this function
    }
    else:
        // use old schema
}

So my question is, is there a proper way (kind of design pattern) to do this implementation rather than using If conditions like above?? (so this should be easily revertible)

What are the best practices for this??

0 Answers
Related