Quelle bibliothèque / cadre avez-vous abandonné comme étant trop complexe pour le problème qu'il résout? [fermé]


12

... et codé la fonctionnalité "manuellement"?

À titre d'exemple plutôt métaphorique, vous n'auriez guère besoin d'une bibliothèque pour résoudre des équations quadratiques, bien que de telles bibliothèques existent et que quelqu'un les prenne au sérieux.

Comme un cas plus discutable, selon les circonstances, je peux abandonner jQuery (par exemple lorsque je n'ai pas besoin de prendre en charge certains navigateurs de l'âge de pierre): cela simplifie certaines choses, mais il ajoute une autre couche de complexité et de manque de fiabilité au DOM. Et la surutilisation de jQuery conduit à des problèmes absurdes, comme celui vu récemment sur SO: comment attribuer un href vide à une abalise avec jQuery? Il s'est avéré que c'était une question HTML, pas même JavaScript.

Un autre cas absurde et pourtant non évident pour beaucoup consiste à utiliser un moteur / langage de modèle basé sur un autre système de modèle: PHP. Troisième niveau de modèle pour quelqu'un?

Et un autre: parfois, cracher XML avec (au sens figuré) printfest beaucoup plus facile que de le faire avec un moteur XML monstrueux.

D'autres cas de votre expérience?


4
Comme tout autre outil, vous utilisez jQuery lorsque cela est approprié. Vous n'utilisez pas un marteau et un burin pour ouvrir votre porte d'entrée si vous avez une clé.
Robert Harvey

1
@Robert Harvey: bien sûr, mais en génie logiciel, nous avons souvent du mal à reconnaître les clés et les marteaux. C'est de cela qu'il s'agit.
mojuba

Gardez à l'esprit que, quelle que soit la complexité d'une bibliothèque populaire, il est plus facile à comprendre pour les autres que votre bibliothèque "simple" personnalisée, car ils y sont habitués.
Louis Kottmann

@RobertHarvey votre porte doit être en bien meilleure forme que la mienne.
Jimmy Hoffa

Réponses:


14

Une grande partie de la bibliothèque d'entreprise MS et de la plupart des contrôles tiers pour .net m'a laissé ce sentiment après un peu d'utilisation.

Votre kilométrage peut varier


2
D'accord - la plupart de la bibliothèque d'entreprise est déroutante ou non intuitive, avec un défilé de bibliothèques tierces qui font un meilleur travail. Mais bien sûr, si vous frappez un Microsoft sur le titre, cela doit être une "meilleure pratique"
Watson

dans les premiers jours, entlib a fait des choses difficiles à faire ou à comprendre avec les premiers frameworks ... de nos jours, il semble que ce soit principalement une rétrocompatibilité avec les premiers jours ou des solutions partiellement cuites que vous verrez dans les versions futures dans beaucoup meilleure forme.
Bill

13

Windows Communication Foundation

Le fait qu'il y ait une photo d'un couteau de l'armée suisse sur la page d'accueil résume tout cela pour moi. Imaginez que la configuration XML soit environ quatre fois plus longue que le code réel que vous écrivez, et il est toujours très difficile d'écrire des services SOAP qui sont interopérables entre C #, Java, PHP, Python et tous les autres langages qu'il était "supposé" être interopérable avec ...

Dans tous les projets futurs, je vais simplement m'en tenir à REST.


2
WCF 4.0 ne nécessite aucun fichier de configuration XML. Je n'ai aucune expérience de l'interopérabilité avec d'autres technologies (à part utiliser WCF en tant que client, qui fonctionne bien), mais je peux dire que je l'ai trouvé à la fois facile et intuitif. Même si j'ai commencé à l'utiliser sans lire de livres ni avoir suivi de formation (et avec des délais à respecter), j'ai pu commencer à courir.
Allon Guralnek

4
J'ai renommé "WCF" en "WTF".
MetalMikester

1
@Allon: J'avoue que je n'ai pas essayé WCF 4.0, il est fort possible qu'ils aient fait des améliorations significatives dans ce domaine ...
Dean Harding

12

L'un des problèmes que j'ai rencontrés avec les gens "qui roulent les leurs" est que - bien que leur approche soit souvent plus rapide et plus simple - elle est également plus susceptible d'être fragile, d'avoir des bogues, d'être incomplète et / ou de contenir des failles de sécurité .

Exemple simple: il pourrait être 10 fois plus facile d'utiliser printf pour émettre du XML que d'utiliser une bibliothèque:

printf("<xml>%s</xml>", str);

mais avez-vous pensé à échapper à des caractères spéciaux dans str? Par exemple ' <' et ' &'? Certaines personnes pourraient dire "non, je ne l'ai pas fait" et écrire ceci:

printf("<xml><![CDATA[%s]]></xml>", str);

Mais il émettra toujours du XML cassé s'il strcontient la sous-chaîne " ]]>" n'importe où. Cas de bord - bien sûr. Mais encore un scénario valable qui pourrait conduire à des problèmes inattendus aux conséquences graves.

Il y a de nombreux moments et endroits où «rouler le vôtre» peut être approprié, mais il faut parfois beaucoup d'expérience et de connaissances pour identifier le moment approprié. C'est pourquoi j'encourage souvent les programmeurs à préférer utiliser des bibliothèques établies (le cas échéant) plutôt que des routines auto-implémentées.


11

Log4Net

La bibliothèque est bonne, mais la documentation est horrible. C'était exagéré pour ce que je voulais faire.

J'ai utilisé Trace à la place.


1
Robert, tu m'as battu aussi si tu es un scélérat! Je regarde juste log4net et je pense "wow, ces auditeurs sont cool. Maintenant, comment puis-je l'utiliser ..?" et puis je pense qu'au moment où je l'aurai compris, j'aurais pu écrire le mien.
JohnL

5
Vraiment - je serais respectueusement en désaccord - cela ne devient pas plus simple que log.error ().
Watson

3
@Watson: Si c'est vraiment aussi simple, pourquoi auriez-vous besoin d'un cadre?
Robert Harvey

J'utilise l'alternative de The Object Guy qui prend quelques minutes à configurer, ayant été rebutée par la complexité inutile de Log4Net.
cjmUK

7

SharePoint

Ne vous méprenez pas, SharePoint est génial si vous avez besoin de la plupart des choses qu'il contient (et il en vient beaucoup!), Mais si vous ne savez pas ce que vous faites ou n'en avez besoin que pour un ou deux les choses, cela ne vaut MASSIVEMENT pas la peine et la configuration.


6

ASP.NET WebForms - Bien qu'en tant que développeur Web .NET, ce soit mon pain et mon beurre depuis longtemps, depuis que j'ai commencé à utiliser le framework MVC (et à venir d'un environnement PHP / Smarty Template) - vous vous rendez compte que parfois il y a juste mieux les moyens de faire du développement Web et l'abstraction qu'il utilise sont exagérés et fuyants .


Je pense que vous voulez dire ASP.NET WebForms, par opposition à ASP.NET MVC. Correct?
Eric King

@Eric - oui, je devrais corriger ça!
Watson

3

Dans presque tous les cas où je l'ai fait, j'ai fini par le regretter:

  • L'utilisation des fonctions PHP oci_ * au lieu d'une bibliothèque wrapper s'est avérée être un mauvais coup en raison de la maintenabilité du code. Le portage de tout le code vers Zend_Db a facilité le développement du maintien du code de la base de données.
  • Rouler mon propre composant de grille ajax, qui a pris trop de temps pour se développer davantage, compte tenu de la vitesse à laquelle certains des autres composants de la grille évoluent. Je porte actuellement tout cela sur les grilles Ext JS car avec celles-ci, il existe une énorme masse de fonctionnalités tierces disponibles.
  • Éviter les bibliothèques comme prototype et jquery a conduit à des occurrences répétées de problèmes inter-navigateurs, souvent difficiles à localiser. Le port Ext JS a résolu mes problèmes de navigation croisée. C'est magique, même si c'est un vaste cadre qui m'a mis des semaines à comprendre.

Je suis arrivé à la conclusion qu'il est préférable de choisir quelques cadres tiers fiables et de les utiliser comme base de tout ce que vous faites. Ces cadres sont développés et débogués par quelqu'un d'autre, ce qui représente un gain de temps incroyable une fois que vous les avez normalisés et bien compris.


+1. Et cela aide si ces bibliothèques sont open source. Allez-y et téléchargez le code source dans toutes les bibliothèques que vous utilisez, si vous ne l'avez pas déjà fait. La lecture du code source de la bibliothèque est un excellent moyen de diagnostiquer et de résoudre les problèmes, ainsi que l'occasion d'apprendre du code d'autres programmeurs (vraisemblablement assez élevé).
Mike Clark

2

System.Text.RegularExpressions

Regex est si complexe et si lent. Je vais très rarement utiliser Regex et j'écris habituellement mon propre analyse et correspondance de texte.

Parfois, je trouve Regex utile pour une correspondance vraiment complexe.


Compilez-vous correctement l'expression rationnelle [ou peut-être que System.Text.RegularExpressions est plus lent que Perl & co. la mise en oeuvre]?
Maciej Piechotka

3
Regex peut être relativement lent par rapport à l'analyse manuelle des chaînes, mais il est plus rapide que beaucoup de gens le pensent et généralement plus que suffisamment rapide pour la plupart des applications pratiques.
Mike Clark

2
Je ne pense pas que ce soit en fait une plainte concernant l'implémentation de .NET en particulier, car il n'y a rien de particulièrement complexe ou lent à ce sujet (en fait, j'ai trouvé que c'était l'une des implémentations les plus rapides disponibles). Du moins, c'est mon expérience. Bien sûr, les expressions régulières en général deviennent facilement complexes, et les gens ont certainement tendance à les utiliser dans des endroits totalement inappropriés.
Dean Harding

2

Non pas que Delphi4PHP ait besoin d'une mauvaise presse, mais je l'ai essayé (version 2.0) et il était extrêmement difficile de le plier à ma volonté. Je voulais l'utiliser pour créer une application web de style youtube pour que les clients puissent voir les vidéos de formation, mais c'était trop lourd et quand je l'ai essayé pour combiner les frameworks PHP (VCL4PHP, Zend, Smarty et Recess), j'ai rencontré l'inévitable, je dois renommer tout parce qu'il n'y a pas d'espace de noms dans PHP 5.

Cela étant dit, je n'ai finalement pas roulé le mien. J'ai utilisé juste appris de mes erreurs et décidé de rester très simple et d'utiliser CodeIgniter et FlowPlayer (avec JQuery).

J'ai une envie que quels que soient les frameworks qui sortent de PHP 5, PHP 6 va avoir des frameworks géniaux qui pourraient en fait bien fonctionner ensemble.


2

Weka

Je fais beaucoup de travail d'apprentissage automatique, et si j'ai besoin de quelque chose de simple comme Naive Bayes ou la régression logistique, j'adore abandonner Weka. Il a de bonnes implémentations de certains algorithmes d'apprentissage machine assez compliqués, mais l'API est une API Java old-school (pré-génériques) excessivement ingénieuse et trop orientée objet. Choses qui m'ennuient à ce sujet:

  1. Il roule sa propre matrice redimensionnable que rien d'autre n'utilise, garantissant une conversion de travail intense d'avant en arrière.

  2. Beaucoup de couplage séquentiel où les méthodes doivent être appelées dans un ordre spécifique et à moins que vous ne fassiez vraiment attention à RTFM, vous ne le réaliserez pas.

  3. Chaque instance doit être un objet Instance et je dois déclarer explicitement avec un objet Attribute qu'il soit nominal ou numérique. Cela conduit à beaucoup de travail chargé de convertir les données sous la forme souhaitée par Weka. Ceci est particulièrement ennuyeux car l'API Weka lève tellement d'exceptions que la compilation de code ne signifie pas qu'elle est susceptible de fonctionner de toute façon. Si je concevais l'API, je serais libéral dans ce que j'ai accepté (peut-être simplement prendre un tableau d'objets) et juste introspecter les données pour comprendre ce que j'ai obtenu et quelle est la bonne chose à faire avec.


2

Sur un projet particulier, j'ai abandonné EJB3. Cela m'a donné l'injection de dépendances et la gestion des transactions gérées par conteneur. Mais cela introduit d'énormes dépendances (par exemple JBoss) et a rendu le système difficile à écrire pour les tests automatisés. Maintenant, je l'ai réduit à l'injection de dépendance de constructeur JPA +.


1

Cracher du HTML sur un port de débogage sur une application. J'avais besoin d'un moyen simple pour obtenir des données actuelles (avec rafraîchissement automatique). Il aurait été bien de tirer une bibliothèque pour la formater, mais il était plus facile de simplement l'imprimer.

J'ai également rejeté la bibliothèque pour une autre: nous utilisons une grande bibliothèque XML complexe dans la plupart de nos applications. Après avoir passé 4 heures par jour à essayer de le faire fonctionner dans une nouvelle application, je viens de dire 'bag it' et j'ai ajouté TinyXML. Ce n'est pas aussi puissant, mais cela prend beaucoup moins d'efforts pour le faire faire des choses simples.


1

Récemment, j'ai travaillé sur un compilateur de langage de script que je peux utiliser dans mes applications. J'en ai utilisé d'autres, mais aucun ne fait exactement ce dont j'ai besoin. J'ai donc pensé pourquoi ne pas essayer d'écrire le mien? Cela peut prendre un an ou deux avant de vraiment convenir à un usage général, mais c'est correct. De plus, c'est une excellente expérience d'apprentissage.

Une autre solution 'roll my own' est les pièces utilisées pour traduire mes applications. Il y a des bibliothèques existantes, mais je n'en ai aimé aucune. J'ai donc fait le mien.

Et les composants de base de données de Delphi. Je les déteste. Toujours avoir. J'ai donc créé ma propre interface de base de données qui fonctionne comme je le souhaite (et exactement comme celle que j'ai créée pour PHP fonctionne, ce qui facilite le codage entre les langues).

Fondamentalement, quand on me donne une option, je finis généralement par créer ma propre bibliothèque.


Je vois ce que tu veux dire. Je peux vous montrer tout un arsenal de STL maison, d'abstraction de base de données, de langues entières avec leurs compilateurs ou interprètes, etc. Ce n'est généralement pas bien accueilli par vos collègues et la direction, mais quel programmeur qui n'a jamais écrit de compilateur même si personne ne s'en souciait?
mojuba

0

Ohhh, tellement. J'ai travaillé sur pas mal de projets agiles en utilisant des API open source. Génial quand ils fonctionnent, mais souvent, nous avons souffert des développeurs fétichistes d'avoir apporté toutes sortes d'API tierces, certaines obscures, d'autres non, simplement parce qu'ils veulent utiliser une ou deux classes. Le résultat final étant un méli-mélo de code et des systèmes piratés ensemble. Ils le remettent en prétendant que c'est le meilleur code de tous les temps, partent et les pauvres slobs qui le ramassent trouvent un gâchis inintelligible et sans papiers plein de problèmes de dépendance et de hacks.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.