Hallo zusammen,
ich habe einige Repositories und einen WCF Service.
Bei mir sieht das momentan wie im Bild (Anhang) aus. Nun denke ich mir aber, dass das auch einfacher gehen muss. Kann ich nicht einfach alle Public Methoden eines Repositories bereitstellen?
Evtl. gibt es auch noch andere Möglichkeiten?
Vielen Dank!
A programmer is just a tool, which converts coffeine into code! 🙂
Hi,
Du kannst einen T-basiertes Base-Repository machen, und dieses dann ebenfalls T-basiert über den WCF schicken ( wenn ich mich richtig erinner ).
Sieht in so aus:
public interface IRepository<T> where T : class
{
void Add( T entity );
void Delete( T entity );
}
public abstract class RepositoryBase<T> where T : class
{
private readonly MyDbContext m_dataContext;
protected RepositoryBase( MyDbContext dbContext )
{
m_dataContext = dbContext;
m_dbset = DataContext.Set<T>( );
}
public virtual void Add( T entity )
{
m_dbset.Add( entity );
}
public virtual void Delete( T entity )
{
m_dbset.Remove( entity );
}
}
Und dann Dein jeweiliges Repository abteilen und mit spezifischen Methoden erweitern.
public class UserRepository : RepositoryBase<User>, IUserRepository
{
public UserRepository( MyDbContext dbContext )
: base( dbContext )
{
}
}
public interface IUserRepository : IRepository<User>
{
}
damit sparst Du Dir bei den Reps ne Menge Tipparbeit und kannst ggfl. gewisse Funktionen / Operationen anhand des Typs auch im WCF zusammenfassen.
Gruß
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo abt,
ich bin gerade wieder auf diesen Thread aufmerksam geworden.
Die Grundidee finde ich hammer gut, nur brauche ich noch eine Schicht, die meine EF Objekte in Domain Objekte umwandelt und umgekehrt.. wo zieh ich die am besten ein?
Danke und viele Grüße
Matthias
A programmer is just a tool, which converts coffeine into code! 🙂
Hi,
das würde ich persl in der Businesschicht machen.
Du kannst für das Mappen zB den Automapper für das mappen der Objekte nutzen
Hallo,
hab das gerade so umgesetzt. Mit Automapper bin ich bereits vertraut 😉
Hab in der RepositoryBase - Klasse noch die EF Objekte drin und im IRepository dann die Domain-Objekte. Sprich in den Repositories wird gemappt und dann die base-Methode aufgerufen 😃
A programmer is just a tool, which converts coffeine into code! 🙂
Hallo Campy,
muss es denn zwingend WCF sein?
Muss die Kommunikation bestimmten Standards (z.B. SOAP) genügen?
Must Du Silverlight Clients bedienen können?
Falls nicht, gibt es Alternativen zu WCF, die können, was Du willst.
WCF folgt dem Dogma der Serviceorientierung. Dies beinhaltet auch die Regel, dass Dienste explizite Schnittstellen haben müssen. Das hat zwar in heterogenen System absolut seine Berechtigung, ist aber in reinen .NET-Anwendungen absolut unnötig.
Wie es aussieht stört Dich diese Regel (wie mich übrigens auch). Du versuchst das irgendwie "aufzuweichen". Falls WCF als Kommunikationsframework für Dein Projekt nicht in Stein gehauen feststeht, könnte ich Dir Alternativen vorstellen.
Gruß
Rainbird