我正在设计一个ETL过程,其中E - > Extractor:它是源和Transformer,它转换内容和Loader:输出数据发送/存储。我希望所有必须是可配置的手段如果当前源文件是将来它可以是数据库也相同的输出将来它可以是数据库所以类/对象设计应该支持这个
I have following hierarchy of class
public interface DataSource
{
public void init();
public Object getNextRecord();
}
//I want to return generic result from getNextRecord
public class FileSource implements DataSource
{
public Object getNextRecord();
{
return file.readLine(); // one by one return file contains
}
}
public class SQLSource implements DataSource
{
public Object getNextRecord();
{
Object[] result = new Object[colssize];
for (int i = 0; i < cols; i++)
result[i] = rs.getObject(i + 1);
return result: // return one row as object array
}
}
public interface Loader
{
public void addRecord(Object object);
}
public class fileLoader
{
public void addRecord(Object object)
{
writeLineToFile((String) object);
}
}
public class SQLLoader implements Loader
{
public void addRecord(Object object)
{
//问题在于获取对象数组而不知道表的详细信息 writeObjectToDB(对象) } } 公共类CapitalizedFileTransformer {
@Override
public void transform(DataSource source, Loader loader)
{
// for file source and file loader this works like this
String data = null;
while ((data = (String) source.getNextRecord()) != null)
{
loader.addRecord(data.toUpperCase());
loader.addRecord("\n");
}
source.close();
loader.close();
// but for sql source and sql loader I have problem
because its returning object array also don't have table info here to which I have to insert and don't want to change code of CapitalizedFileTransformer
}
}
It will be great if anyone can help me to re-design this classes I want a source and loader and transformer to be generic i.e any file source should work with sql loader and with any transformer