Lo pseudo codice della mia classe è nel seguente formato:
public class Config {
final private Map<String, TableSchema> schemas;
public Config() {
schemas = parseSchemas();
}
public TableSchema getSchema(String tableName) {
TableSchema tableSchema = schemas.get(tableName);
if(/*Based on certain conditions*/) {
return new TableSchema(/*Pass some values*/)
}
return tableSchema;
}
Map<String, TableSchema> parseSchemas() {
//Read some config files
tableSchema = new TableSchema(/*Pass some values based on the read config files*/);
schemas.put(tableName, tableSchema);
}
}
public class DBOperations {
private final TableSchema schema;
public DBOperations(Config config, String tableName) {
schema = config.getSchema(tableName);
}
}
public class TableSchema {
method1();
method2();
}
Per accedere ai metodi TableSchema in DBOperations, tutto ciò che dovevo fare era chiamare schema.method1()
e così via. Tuttavia ora ho bisogno di avere più implementazioni di DBOperations che potrebbero non avere tutti gli stessi metodi TableSchema su cui operare (il nome della funzione potrebbe essere lo stesso, ma l'implementazione è diversa). Per questo ho pensato di creare un'interfaccia TableSchema e ho implementato molteplici implementazioni basate sulle mie esigenze lungo le linee del modello strategico.
Tuttavia, se utilizzo il modello di strategia, dovrò passare anche il costruttore. Tuttavia i valori della classe TableSchema dipendono dai valori che ritengo nella classe Config. Come dovrei affrontare il mio design in questo caso?