Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 17th, 2011  |  syntax: None  |  size: 1.41 KB  |  hits: 103  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
This paste has a previous version, view the difference. Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1.     //
  2.     // In project `Service`
  3.     //
  4.     public class Consumer
  5.     {
  6.         private readonly Parser<Foobar> _parser;
  7.         private readonly FoobarRepository _repository;
  8.  
  9.         public Consumer(Parser<Foobar> parser, FoobarRepository repository)
  10.         {
  11.             _parser = parser;
  12.             _repository = repository;
  13.         }
  14.  
  15.         public void Consume(object value)
  16.         {
  17.             var parsedFoobar = _parser.Parse(value);
  18.             _repository.Add(parsedFoobar);
  19.         }
  20.     }
  21.  
  22.     public abstract class Parser<TReturn>
  23.     {
  24.         public abstract TReturn Parse(object value);
  25.     }
  26.  
  27.     public class ObjectParser : Parser<Foobar>
  28.     {
  29.         // Return type is coupled with domain
  30.         public override Foobar Parse(object value)
  31.         {
  32.             // Parse `value`
  33.  
  34.             return new Foobar
  35.             {
  36.                 Name = "Foo"
  37.             };
  38.         }
  39.     }
  40.  
  41.     //
  42.     // In project `Common`
  43.     //
  44.     public abstract class FoobarRepository
  45.     {
  46.         public abstract void Add(Foobar foobar);
  47.     }
  48.  
  49.     public class FoobarRepositorySql : FoobarRepository
  50.     {
  51.         public override void Add(Foobar foobar)
  52.         {
  53.             // Add objet `foobar` to SQL Server database
  54.         }
  55.     }
  56.  
  57.     // This is my very simple domain model.
  58.     public class Foobar
  59.     {
  60.         public virtual string Name { get; set; }
  61.     }