Lundi 01 février 2016 à 00:00
Cette discussion est en relation avec le billet suivant :
GuybrushSi ce code n'est pas bon, je ne vois pas à quoi peuvent bien servir les interfaces en C#...Test unitaires: Mock
GuybrushTu veux dire que dans ton exemple, (new Foo()).doSomething(); affichera "a" et non pas "b" ?Non:
Foo fooImpl = new Foo();
fooImpl.DoSomething() => "b";
IFoo fooInterf = new Foo();
fooInterf.DoSomething() => "a";
GuybrushOu (mais "aussi pire" à mes yeux) que si x.doSomething(); est appelé, si la référence de x est stockée dans un type Foo, j'ai "b", et si x pointe vers un Foo mais stocké dans un type IFoo, j'ai "a" ?Voila c'est ça.
private class GitSourceControlServer : ISourceControlServer {
...
}
Et pour t'amuser, tu peux déclarer les méthodes aussi privées :private class GitSourceControlServer : ISourceControlServer {
private bool ISourceControlServer.Checkin() { ... }
}
Après dans tous les projets, il y a des normes de codage et tu fais des codes reviews pour que tout le monde code plus ou moins identiquement, tu évites de faire dériver tes classes x fois d'une classe abstraite, tu préfères implémenter plusieurs interfaces que tout mettre dans la même, tu essayes de suivre les bonnes pratiques du Clean Code, etc.MerlePour manipuler tout ! collections, XML, entities, ... (ce sont des implémentations différentes à chaque fois, respectivement linq2objects, linq2xml, linq2entities)Oui, je connais un peu Linq (je ne l'ai utilisé qu'une fois par contre), mais tu disais que tu ne pourrais plus t'en passer. Je doute que tu fasses un usage quotidien de collections XML, relationnelles, etc., non ?
PetitCalgonTest unitaires: MockJe pense plutôt que mon code est bon
Injection de dépendance, etc.
GuybrushJe doute que tu fasses un usage quotidien de collections XML, relationnelles, etc., non ?En fait on peut utiliser Linq sur n'importe quelle énumération. Tout ce qui hérite de IEnumerable peut utiliser Linq. Donc, les array, les collection, les listes, les dictionnaires, etc.
int age = Animals.OfType<Cat>().Where(cat => cat.Pounds > 100 && cat.Color == Red).First().Select(cat => cat.Age);
foreach(User user in Users.Where(user => user.IsConnected)) {
...
}
PetitCalgonCa permet de faire ce genre d'appel:int age = Animals.OfType<Cat>().Where(cat => cat.Pounds > 100 && cat.Color == Red).First().Select(cat => cat.Age);
[cat.age for cat in animals where isinstance(cat, Cat) and cat.pounds > 100 and cat.color == 'red'].pop(0)
PetitCalgonPour les personnes connectés du minichat, tu aurais:foreach(User user in Users.Where(user => user.IsConnected)) {
...
}
for user in filter(lambda u: u.isConnected(), users):
...
var query = from Animals.OfType<Cat>
where cat.Pounds > 100 && cat.Color == Red
select cat.Age;
Il faudra encore exécuter la query pour récupérer le 1er élément.GuybrushOui, je connais un peu Linq (je ne l'ai utilisé qu'une fois par contre), mais tu disais que tu ne pourrais plus t'en passer. Je doute que tu fasses un usage quotidien de collections XML, relationnelles, etc., non ?Oh si, comme le dit PetitCalgon je l'utilise beaucoup sur les collections, mais également sur Entities (on a des projets qui utilisent EntityFramework).
Ce message a été modifié 1 fois.
Dernière modification : 9 février 2016
à 15:33 par
Tchou.
Tchouc'est la liste exhaustive ?Ça fait un bout de temps que je ne me suis plus intéressé au sujet. On avait cherché dans mon ancien boulot car on était partit sur une approche LinqToSQL / EntityFramework.
PetitCalgonA l'époque, si je ne dis pas de bêtises, Microsoft avait fait son driver/DLL pour Linq/MS SQL et attendait des autres entreprises (Oracle, etc.) qu'ils fassent leur driver/DLL pour Linq/leur BDD.C'était du temps de Linq2SQL, qui était exclusif à Sql Server. Ils ont livré ça en attendant de pouvoir livrer Entity Framework.
1996-2024 — Lexpage v4 — GPLv3 (sources)
page générée le 23 décembre 2024 à 20:34:47