Ein Repository-Factory-Klasse
public enum RepositoryType
{
ClinicRepository,
MedicationRepository,
PatientRepository,
TreatmentRepository
}
public class ObjectFactory<T>
{
public static IRepository<T> GetRepositoryInstance(RepositoryType type)
{
switch (type)
{
case RepositoryType.ClinicRepository:
return new what ?;
default:
return what ?
}
}
}
public interface IRepository<T>
{
void Add(T item);
void Remove(int id);
void Update(T item);
IList<T> GetAll();
T GetItemById(int id);
}
Ich versuche zu schaffen, eine RepositoryFactory Klasse und ich habe kopiert, was ich bisher getan habe. Könnte jemand bitte helfen Sie mir, um dies herauszufinden ? Ich bin stecken !
Vielen Dank im Voraus
edit :
Ich soll sowas am Ende. Ist es möglich, 1 Repository-Klasse und implementieren so etwas wie
dc.THATOBJECT.insertonsubmit(item) ?
public class TreatmentRepository : IRepository<Treatment>
{
public void Add(Treatment item)
{
using (PatientsDataContext dc = new PatientsDataContext())
{
dc.Treatments.InsertOnSubmit(item);
dc.SubmitChanges();
}
}
InformationsquelleAutor der Frage Kubi | 2011-01-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfachsten Fabriken erfordert nur, dass Ihr abgeleiteten Typen von IRepository haben parameterlosen Konstruktoren.
Wenn Sie erfordern spezielle Konstruktoren für ein bestimmtes repository-Typ, können Sie die Objekte als ein Objekt-array und erstellen Sie mit Hilfe
CreateInstance
Verwenden Sie diese, Sie brauchen nur zu sagen
InformationsquelleAutor der Antwort Mark H
Etwas zurückgeben, müssen Sie eine Klasse schreiben, die
IRepository<T>
.Es scheint, gibt es vier Haupttypen (ClinicRepository, MedicationRepository, etc.) - sind Sie sehr unterschiedlich, wie Sie "speichern" Sachen? Wenn ja, machen Sie eine separate Klasse für jeden. Andernfalls verwenden Sie die gleiche Klasse mit bestimmten Feldern der Steuerung von Verhalten.
Update
Basierend auf Ihrem Bearbeitungen und Kommentare, Sie haben ein repository, das wirklich einige Operationen auf einer Tabelle. Das einzige, was wirklich unterschiedlich ist die Tabelle, die es umschließt. Aber die Tabelle ist Mitglied einer Daten-Kontext. So könnte man verzögern, die Wahl der Tabelle um eine abgeleitete Klasse.
Wäre dies die Basis-Klasse:
Einer abgeleiteten Klasse müssen nur angeben, so wählen Sie eine Tabelle aus dem Kontext:
InformationsquelleAutor der Antwort Daniel Earwicker
Können ohne die
enum
. Sie brauchen entweder eine generische repository-Typ, oder verschiedenen repository-Typen implementierenIRepository<T>
. Wenn Sie ein generisches repository, die Sie implementieren können, die das Werk tun, etwas entlang der Linien von:InformationsquelleAutor der Antwort Ilya Kogan
Ich würde empfehlen, dass Sie einen Inversion of Control (IoC) container für diese. In der Fabrik (oder Sie können sogar gehen Sie direkt zu den IoC-container), könnten sich geben.
oder noch besser, verwenden Sie Einfach eine generische Methode in Ihre Fabrik
InformationsquelleAutor der Antwort bendewey