2009-08-20 7 views
2

J'essaie de comprendre ce que le meilleur/plus propre/plus facile à maintenir, pour le problème suivant. Ma classe "Client" est générée via LINQ à partir de la base de données. Le client dispose d'un lien d'activation spécial qui est une URL qui doit être générée à partir des données d'une instance client et de certaines données de configuration statiques. Solution 1: Étendre la classe partielle Customer Class avec la méthode GenerateActivationUrl() qui récupérera les données de sa propre instance et appellera la classe statique qui contient les données de configuration, puis rendra l'URL et la renverra sous la forme d'une chaîne.Meilleur code: étendre la classe LINQ ou créer une classe auxiliaire distincte?

Solution 2: Créez une classe d'assistance statique "LinkBuilder" qui prend un client comme argument pour une méthode GenerateActivationUrl (client client) qui prendra ensuite les données nécessaires de l'instance client et également les données de configuration statiques puis retournera l'Url comme une chaîne.

Quelle est la meilleure solution, et pourquoi? Je vous remercie!

Répondre

2

Que voulez-vous dire par "étendre"? héritage? méthodes d'extension?

Personnellement, j'utiliser une classe partielle (dans le même espace, mais un fichier différent du codegen) pour exposer cela comme une propriété:

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

Cela lie directement ActivationUrl comme une propriété régulière sur l'instance Customer.

En tant que propriété, il peut participer à la liaison de données (contrairement aux méthodes d'extension qui ne le peuvent pas).

Si vous avait faire « l'option 2 » (peut-être vous n'avez pas accès à la dll DAL), puis une méthode d'extension serait approprié:

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

Oui, je voulais dire la classe partielle « extension ". Pas de méthodes d'extension. Il suffit d'ajouter à la classe partielle générée par LINQ. – Alex

+0

Votre commentaire n'est toujours pas clair à 100%; mais ne modifiez pas la sortie générée, si c'est ce que vous voulez dire. –

+0

Je pense que je vais aller avec ce que vous avez suggéré (option 1). Merci! – Alex

Questions connexes