Interface d'Extension de modèles

Les nouvelles extensions en .Net 3.5 permettre de fonctionnalités pour être séparé des interfaces.

Par exemple .Net 2.0

public interface IHaveChildren {
    string ParentType { get; }
    int ParentId { get; }

    List<IChild> GetChildren()
}

Peut (3.5) deviennent:

public interface IHaveChildren {
    string ParentType { get; }
    int ParentId { get; }
}

public static class HaveChildrenExtension {
    public static List<IChild> GetChildren( this IHaveChildren ) {
        //logic to get children by parent type and id
        //shared for all classes implementing IHaveChildren 
    }
}

Cela me semble être un meilleur mécanisme pour de nombreuses interfaces. Ils n'ont plus besoin d'un résumé de la base de partager ce code, et fonctionnellement le code fonctionne de la même façon. Cela pourrait rendre le code plus maintenable et plus facile à tester.

Le seul inconvénient étant qu'un résumé des bases de la mise en œuvre peut être virtuel, mais qui peut être contourné (serait une méthode d'instance masquer une extension de la méthode avec le même nom? serait-il du code source de confusion pour le faire?)

Tout autres raisons de ne pas utiliser régulièrement ce schéma?


Précisions:

Ouais, je vois la tendance avec les méthodes d'extension est de se retrouver avec eux partout. Je serais particulièrement prudent d'avoir tout de suite .La valeur nette types, sans beaucoup d'examen par les pairs (je pense que la seule que nous ayons sur une chaîne de caractères est un .SplitToDictionary() - similaire à .Split() mais en prenant une valeur-clé délimiteur trop)

Je pense qu'il y a un ensemble de meilleures pratiques de débat 😉

(Soit dit en passant: DannySmurf, votre PM sons effrayants.)

Je suis venu demander ici sur l'utilisation de méthodes d'extension où, auparavant, nous avions des méthodes d'interface.


J'essaie d'éviter beaucoup de niveaux de classes de base abstraites - les classes de mise en œuvre de ces modèles pour la plupart ont déjà des classes de base. Je pense que ce modèle pourrait être plus facile à gérer et moins trop couplée que l'ajout d'autres hiérarchies d'objets.

Est-ce que MS a fait de IEnumerable et IQueryable pour Linq?

InformationsquelleAutor Keith | 2008-08-11