public interface IExtractor<T>
{
IEnumerable<T> Extract();
}
public interface ITransformer<T>
{
T Transform(T input);
}
public interface ILoader<T>
{
void Load(IEnumerable<T> data);
}
2. Generic ETL Engine
public class EtlEngine<T>
{
private readonly IExtractor<T> _extractor;
private readonly ITransformer<T> _transformer;
private readonly ILoader<T> _loader;
public EtlEngine(IExtractor<T> extractor, ITransformer<T> transformer, ILoader<T> loader)
{
_extractor = extractor;
_transformer = transformer;
_loader = loader;
}
public void Run()
{
var extracted = _extractor.Extract();
var transformed = extracted.Select(item => _transformer.Transform(item)).ToList();
_loader.Load(transformed);
}
}
3. Sample Implementation
Model
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
CSV Extractor
public class CsvExtractor : IExtractor<Person>
{
private readonly string _filePath;
public CsvExtractor(string filePath)
{
_filePath = filePath;
}
public IEnumerable<Person> Extract()
{
var lines = File.ReadAllLines(_filePath).Skip(1); // Skip header
foreach (var line in lines)
{
var parts = line.Split(',');
yield return new Person
{
Name = parts[0],
Age = int.Parse(parts[1])
};
}
}
}
Transformer
public class PersonTransformer : ITransformer<Person>
{
public Person Transform(Person input)
{
input.Name = input.Name.ToUpperInvariant();
return input;
}
}
Loader (write to console or file)
public class ConsoleLoader : ILoader<Person>
{
public void Load(IEnumerable<Person> data)
{
foreach (var person in data)
{
Console.WriteLine($"{person.Name}, {person.Age}");
}
}
}
4. Putting It All Together
class Program
{
static void Main(string[] args)
{
var extractor = new CsvExtractor("people.csv");
var transformer = new PersonTransformer();
var loader = new ConsoleLoader();
var engine = new EtlEngine<Person>(extractor, transformer, loader);
engine.Run();
}
}
Top comments (0)
Subscribe
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Top comments (0)