mardi 24 décembre 2019

Implementing a design pattern in a Database project

I'm at my last year at the university and working on my final project with a group of friends. I'm responsible on implementing the database (using google firestore in java) and i'm trying to implement it using a design pattern. I found the adapter quiet useful, as I can create an interface called: GenericDB, which contains all the methods the database needs to use. A concrete class, let's call her FirestoreDB which implements it, and an Adapter, which also implements the GenericDB, and holds an Instance Of GenericDB as a variable, so I can choose at run time which db I will want to use (maybe in the future the db would change) Here is some basic code:

public interface GenericDB {

boolean add(String... args);

boolean delete(String... args);

boolean get(String... args);

boolean changePassword(String... args);

}

public class FirestoreDB implements GenericDB {
private final Firestore db;
public FirestoreDB() {
    FirestoreOptions firestoreOptions =
            FirestoreOptions.getDefaultInstance().toBuilder()
                    .setProjectId(Constants.PROJECT_ID)
                    .build();
    this.db = firestoreOptions.getService();
}

public boolean add(String... args) {
    return true;
}

public boolean delete(String... args) {
    return false;
}

public boolean get(String... args) {
    return false;
}

public boolean changePassword(String... args) {
    return false;
}

}

public class Adapter implements GenericDB {

private GenericDB db;
public Adapter(GenericDB db){
    this.db = db;
}
public boolean add(String... args) {
    return this.db.add(args);
}

public boolean delete(String... args) {
    return db.delete(args);
}

public boolean get(String... args) {
    return db.get(args);
}

public boolean changePassword(String... args) {
    return db.changePassword(args);
}

}

public class DatabaseCreator {
    public GenericDB getDB(DATABASE database) {
        switch (database) {
            case FIRESTORE:
                return new FirestoreDB();
            default:
                return null;
    }
}

}

    DatabaseCreator database = new DatabaseCreator();
    GenericDB db = database.getDB(EXTRA.DATABASE.FIRESTORE);
    Adapter ad = new Adapter(db);
    System.out.println(ad.add("1"));

Is this a good use of the adapter pattern?

Aucun commentaire:

Enregistrer un commentaire