2015-02-26 5 views
5

Ich habe bereits Entity Framework zusammen mit einem Repository und einigen statischen Klassen/Methoden zur Manipulation der Daten. Hier ist ein typisches Beispiel:Erweiterungsmethode auf Klasse - gute oder schlechte Idee?

public static IEnumerable<Supplier> Contains(IEnumerable<int> idList) 
{ 
    return SupplierView.Select().Where(x => idList.Contains(x.ID)); 
} 

Diese Methoden abfragen meiner EF-Repository und manchmal brauche ich eine Reihe von Variablen zu übergeben Sie die Daten, die ich wieder brauchen.

Da mein Lieferant Unternehmen bereits vorhanden ist, ich bin Betrachtung meiner Fragen Erweiterungsmethoden mit Hilfe der Klasse machen, so etwas wie diese:

public static IEnumerable<Supplier> GetSimilar(this Supplier s) 
    { 
     return SupplierView.Select().Where(/* the criteria matches */)); 
    } 

Es wäre nur für die Abfrage von Daten verwendet werden - aber wie ich bin Ich bin nicht sicher, ob dies eine großartige Design-Idee ist - aber es ist sicherlich bequemer, Params zu übergeben/zu validieren etc.

Ich habe bereits eine Teilklasse für meine Haupt-Klasse eingerichtet Entitäten, aber ich neige dazu, Eigenschaften hinzuzufügen, wenig Auswirkungen.

Irgendwelche Gedanken?

+0

Ich glaube nicht, dass es irgendwelche offensichtlichen Gründe gibt, einen der Ansätze zu wählen - Sie müssen sich Ihren Gesamtcode ansehen und sehen, wo solche Methoden am besten passen. Vielleicht haben Sie viele verschiedene Fragen und sie natürlich gruppiert oder vielleicht wollen Sie Intellisence Vorteile aber nicht mögen riesige Spüle Klassen ... Ich fühle es gibt keine echte "das ist die Art und Weise" Antwort ... –

+0

Danke für Ihre Kommentare Alexie. Ich habe relativ wenig Erfahrung in dieser Umgebung - ich mag es nicht, eine Klasse auf diese Weise zu verwenden, aber die Puristen sagen, dass es die Regeln der Kapselung usw. bricht. – dotnetnoob

Antwort

12

Ist Supplier eine Klasse für sich?

Wenn ja, dann würde ich nur die Erweiterung dieser Klasse empfehlen - anstatt auf Erweiterungsmethoden anzuheften.

Wenn es eine Klasse aus der Datenbank von EF erzeugt wird, ist es ein public partial class so können Sie leicht für Supplier in einer zweiten Datei zusätzliche Methoden schreiben, auch die public partial class mit - diese werden dann in fusionierten eine einzige .NET-Klasse bei Kompilierzeit

Ich mag Erweiterungsmethoden und sie machen eine Menge Sinn - wenn Sie Methoden zu Klassen hinzufügen müssen, die Sie nicht steuern - z. .NET-Framework-Klassen oder Drittanbieterklassen.

+3

Extensions-Methoden machen auch Sinn, wenn Sie Ihre Klasse steuern, aber nicht verwenden können eine teilweise Definition (normalerweise, wenn Sie versuchen, Ihre eigene Klasse in einer anderen Assembly zu erweitern). Abhängig von der Lösungsarchitektur des OPs sind Teilklassen möglicherweise keine Option. – ken2k

+1

@ ken2k: ja, guter Punkt - nie daran gedacht ... –

+0

Um zu verdeutlichen, EF ist DAL - oben sind in BLL. Ich verwende bereits partielle Klassen, um meine eigenen Lieferanteneigenschaften anzugehen, aber das Beispiel, das ich angegeben habe, muss die Datenbank nach anderen Lieferanten abfragen. – dotnetnoob