2016-05-12 12 views
-1

Ich habe einen Manager, der Objekte aus einem Repository liest. Die Objekte verweisen basierend auf einer gespeicherten Enumerationseigenschaft auf andere Objekte einer bekannten Basisklasse.Was ist ein gutes Entwurfsmuster in C#, um referenzierte Objekte verschiedener Unterklassen zu instanziieren?

Was ist ein gutes Entwurfsmuster, um zu wissen, welcher Manager/Repository auf das Referenzobjekt abzufragen ist? Ein Schalterblock über die gespeicherte Art des Objekts würde sehr schnell außer Kontrolle geraten.

Zum Beispiel:

public class Person 
{ 
    public Animal Pet { get; set; } 
    public AnimalKind PetKind { get; set; } 
} 

public enum AnimalKind 
{ 
    Dog, 
    Cat 
} 

public abstract class Animal 
{ 

} 

public class Dog : Animal 
{ 

} 

public class Cat : Animal 
{ 

} 

public class DogManager /**/ 
public class CatManager /**/ 

public class PersonManager 
{ 
    public IList<Person> GetPersons() 
    { 
     var persons = Repository.GetPersons(); 
     // Pattern to instantiate person.Pet with the proper class??? 
     // The Repository is very lightweight and does not load references. 
    } 
} 

Könnte mir jemand in die richtige Richtung? Irgendein empfohlenes Buch?

Bearbeiten: Es gibt eine Tabelle in der Datenbank für jeden Tiertyp.

+0

Dies könnte sogar ein Anti-Pattern sein: Die Basisklasse scheint nur dort zu sein, um sie im Container zu lagern. –

Antwort

0

Ich denke, die Fabrik Methode Muster wäre hier nützlich.

Wikipedia Link

das Factory-Methode Muster ist ein Erzeugungsmuster, die Factory-Methoden verwendet, um mit dem Problem fertig zu werden Objekte zu schaffen, ohne die genaue Klasse des Objekts angeben zu müssen, die erstellt werden

auch hier sind ein paar Artikel über sie in C# Umsetzung: Factory Method, Abstract Factory

Edit: hier ist ein wel ist lch bekanntes Buch über Designmuster - Design Patterns: Elements of Reusable Object-Oriented Software