2009-08-20 5 views
2

Ich versuche herauszufinden, was der bessere/sauberer/wartungsfreundlichste Weg ist, für das folgende Problem. Meine Klasse "Kunde" wird über LINQ aus der Datenbank generiert. Der Kunde verfügt über einen speziellen Aktivierungslink, bei dem es sich um eine URL handelt, die aus Daten sowohl einer Kundeninstanz als auch einiger statischer Konfigurationsdaten generiert werden muss.Besserer Code: LINQ-Klasse erweitern oder separate Hilfsklasse erstellen?

Lösung 1: Erweitern Sie die partielle Customer Class mit der GenerateActivationUrl() -Methode, die Daten von ihrer eigenen Instanz abruft und die statische Klasse mit Konfigurationsdaten aufruft und die URL dann rendert und als String zurückgibt.

Lösung 2: Erstellen Sie eine statische Helper-Klasse "LinkBuilder", die einen Kunden als Argument für eine GenerateActivationUrl-Methode (Kundenkunde) verwendet, die dann die erforderlichen Daten aus der Kundeninstanz und den statischen Konfigurationsdaten übernimmt und dann zurückgibt die URL als Zeichenfolge

Welche Lösung ist besser und warum? Vielen Dank!

Antwort

2

Was genau meinen Sie mit "erweitern"? Erbe? Erweiterungsmethoden?

Persönlich würde ich eine partielle Klasse verwenden (im gleichen Namensraum, sondern eine andere Datei an das codegen) dies als Eigenschaft zu entlarven:

namespace MyDalNamespace { 
    partial class Customer { 
     public string ActivationUrl {get {/* some code */ }} 
    } 
} 

Dies bindet direkt ActivationUrl als regelmäßige Eigenschaft auf die Customer Instanz.

Als Eigenschaft kann es an der Datenbindung teilnehmen (im Gegensatz zu Erweiterungsmethoden, die nicht möglich sind).

Wenn Sie zu tun hatte „Option 2“ (vielleicht haben Sie keinen Zugriff auf die DAL dll), dann eine Erweiterung Methode wäre angemessen:

GenerateActivationUrl(this Customer customer) { ... } // note "this" 
+0

Ja ich meinte partielle Klasse „-Erweiterung ". Keine Erweiterungsmethoden. Einfaches Hinzufügen zu der von LINQ generierten partiellen Klasse. – Alex

+0

Ihr Kommentar ist immer noch nicht 100% klar; Editiere die generierte Ausgabe nicht, wenn du das meinst. –

+0

Ich denke, ich werde mit dem gehen, was Sie vorgeschlagen haben (Option 1). Vielen Dank! – Alex