
Untitled
By: a guest on
Apr 17th, 2011 | syntax:
None | size: 1.41 KB | hits: 103 | expires: Never
//
// In project `Service`
//
public class Consumer
{
private readonly Parser<Foobar> _parser;
private readonly FoobarRepository _repository;
public Consumer(Parser<Foobar> parser, FoobarRepository repository)
{
_parser = parser;
_repository = repository;
}
public void Consume(object value)
{
var parsedFoobar = _parser.Parse(value);
_repository.Add(parsedFoobar);
}
}
public abstract class Parser<TReturn>
{
public abstract TReturn Parse(object value);
}
public class ObjectParser : Parser<Foobar>
{
// Return type is coupled with domain
public override Foobar Parse(object value)
{
// Parse `value`
return new Foobar
{
Name = "Foo"
};
}
}
//
// In project `Common`
//
public abstract class FoobarRepository
{
public abstract void Add(Foobar foobar);
}
public class FoobarRepositorySql : FoobarRepository
{
public override void Add(Foobar foobar)
{
// Add objet `foobar` to SQL Server database
}
}
// This is my very simple domain model.
public class Foobar
{
public virtual string Name { get; set; }
}