Quale libreria / framework hai considerato troppo complesso per il problema che sta risolvendo? [chiuso]


12

... e codificato la funzionalità "manualmente"?

Come esempio piuttosto metaforico, difficilmente avresti bisogno di una libreria per risolvere equazioni quadratiche, anche se tali librerie esistono e qualcuno le prende sul serio.

Come caso più discutibile, a seconda delle circostanze potrei abbandonare jQuery (ad esempio quando non ho bisogno di supportare alcuni browser dell'età della pietra): semplifica alcune cose ma aggiunge un altro livello di complessità e inaffidabilità a DOM. E l'uso eccessivo di jQuery porta a problemi assurdi, come quello visto di recente su SO: come posso assegnare un href vuoto a un atag con jQuery? Si è scoperto che era una domanda HTML, nemmeno JavaScript.

Un altro caso assurdo e tuttavia non ovvio per molti è l'utilizzo di un motore / linguaggio di template basato su un altro sistema di template: PHP. Terzo livello di tentazione di qualcuno?

E un altro: a volte sputare XML con (in senso figurato) printfè molto più facile che farlo con un motore XML mostruoso.

Altri casi dalla tua esperienza?


4
Come qualsiasi altro strumento, usi jQuery dove è appropriato. Non usi un martello e uno scalpello per aprire la porta d'ingresso se hai una chiave.
Robert Harvey,

1
@Robert Harvey: certo, ma nell'ingegneria del software abbiamo spesso problemi a riconoscere chiavi e martelli. Ecco di cosa parla il post.
Mojuba,

Ricorda che non importa quanto sia complessa una libreria popolare, è più facile capire per gli ordini di grandezza rispetto alla tua libreria "semplice" personalizzata, perché ci sono abituati.
Louis Kottmann,

@RobertHarvey la tua porta deve essere in una forma molto migliore della mia.
Jimmy Hoffa,

Risposte:


14

Gran parte della libreria aziendale MS e la maggior parte dei controlli di terze parti per .net mi hanno lasciato questa sensazione dopo un po 'di utilizzo.

Il tuo chilometraggio può variare


2
D'accordo - la maggior parte della libreria Enterprise è confusa o non intuitiva, con una sfilata di librerie di terze parti che svolgono un lavoro migliore. Ma ovviamente, se schiaffeggi una Microsoft sul titolo, deve essere una "best practice"
Watson,

nei primi tempi entlib ha fatto alcune cose che erano un po 'difficili da fare o da capire con i primi framework ... in questi giorni sembra essere principalmente la retrocompatibilità con i primi giorni o soluzioni parzialmente cotte che vedrai nelle versioni future in un forma migliore.
Bill

13

Windows Communication Foundation

Il fatto che abbia una foto di un coltellino svizzero nella pagina iniziale mi riassume tutto. Immagina che la configurazione XML sia circa quattro volte più lunga del codice effettivo che scrivi, ed è ancora molto difficile scrivere servizi SOAP che siano interoperabili tra C #, Java, PHP, Python e tutti quegli altri linguaggi che "doveva" essere interoperabile con ...

In tutti i progetti futuri, rimarrò solo con REST.


2
WCF 4.0 non richiede alcun file di configurazione XML. Non ho alcuna esperienza con l'interoperabilità con altre tecnologie (a parte l'utilizzo di WCF come client, che funziona bene), ma posso dire di averlo trovato facile e intuitivo. Anche se ho iniziato a usarlo senza leggere libri o allenarmi (e con scadenze da rispettare), sono stato in grado di colpire il terreno correndo.
Allon Guralnek,

4
Ho rinominato "WCF" in "WTF".
MetalMikester

1
@Allon: Devo ammettere di non aver provato WCF 4.0, è del tutto possibile che abbiano apportato miglioramenti significativi in ​​quella zona ...
Dean Harding

12

Uno dei problemi che ho riscontrato con le persone "che si muovono da sole" è che - sebbene il loro approccio sia spesso più rapido e semplice - è anche più probabile che sia fragile, che abbia bug, sia incompleto e / o contenga difetti di sicurezza .

Esempio semplice: potrebbe essere 10 volte più facile usare printf per emettere XML che usare una libreria:

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

ma ti sei ricordato di sfuggire a personaggi speciali str? Ad esempio " <" e " &"? Alcune persone potrebbero dire "no, non l'ho fatto" e procedere a scrivere questo:

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

Ma emetterà comunque XML non funzionante se strcontiene la sottostringa " ]]>" ovunque in esso. Custodia laterale - certo. Ma è ancora uno scenario valido che potrebbe portare a problemi imprevisti con gravi conseguenze.

Ci sono molte volte e luoghi in cui "rotolare il tuo" può essere appropriato, ma a volte ci vuole molta esperienza e conoscenza per identificare quando è appropriato. Questo è il motivo per cui incoraggio spesso i programmatori a preferire l'uso di librerie consolidate (ove disponibili) invece di routine auto-implementate.


11

Log4Net

La biblioteca è buona, ma la documentazione è orrenda. Era eccessivo per quello che volevo fare.

Ho usato invece Trace .


1
Robert, anche tu mi picchi, mascalzone! Guardo log4net e penso "wow, questi ascoltatori sono fantastici. Ora come lo uso ..?" e poi penso che, quando l'avrò capito, avrei potuto scrivere il mio.
JohnL,

5
Davvero - dovrei essere in disaccordo con rispetto - non c'è niente di più semplice di log.error ().
Watson,

3
@Watson: se è davvero così semplice, perché avresti bisogno di un framework?
Robert Harvey,

Uso l'alternativa di The Object Guy che richiede pochi minuti per essere configurata, rimandata dalla complessità inutile di Log4Net.
cjmUK,

7

SharePoint

Non fraintendetemi, SharePoint è fantastico se avete bisogno della maggior parte delle cose che viene fornito (e viene fornito molto!), Ma se non sapete cosa state facendo o ne avete bisogno solo per uno o due cose, non è assolutamente degno lo sforzo e la configurazione.


6

ASP.NET WebForms - Anche se come sviluppatore web .NET è stato il mio pane e burro per molto tempo, da quando ho iniziato a utilizzare il framework MVC (e proveniente da un ambiente PHP / Smarty Template) - ti rendi conto che a volte ci sono solo meglio i modi di fare lo sviluppo web e l'astrazione che utilizza è eccessivo e che perde .


Penso che intendi ASP.NET WebForms, distinto da ASP.NET MVC. Corretta?
Eric King,

@Eric - sì, dovrei risolverlo!
Watson,

3

In quasi tutti i casi che ho fatto questo, ho finito per rimpiangerlo:

  • L'uso delle funzioni oci_ * di PHP invece di una libreria wrapper si è rivelato una mossa sbagliata a causa della manutenibilità del codice. Il porting di tutto il codice su Zend_Db ha reso molto più semplice lo sviluppo mantenendo il codice del database.
  • Rotolare il mio componente ajax grid, che ha impiegato troppo tempo a svilupparsi ulteriormente, data la velocità con cui si evolvono alcuni altri componenti della griglia. Attualmente sto eseguendo il porting di tutto sulle griglie Ext JS perché con quelle c'è una grande massa di funzionalità di terze parti disponibili.
  • Evitare librerie come prototipo e jquery ha portato a ripetute ricorrenze di problemi tra browser, spesso difficili da rintracciare. La porta Ext JS ha risolto i miei problemi tra browser. È magico, anche se è un vasto quadro che mi ha richiesto settimane per capire.

Sono giunto alla conclusione che è molto meglio scegliere alcuni framework di terze parti affidabili e usarli come base per tutto ciò che fai. Quelle strutture sono sviluppate e messe a punto da qualcun altro, il che è un incredibile risparmio di tempo una volta che le hai standardizzate e le hai comprese bene.


+1. E aiuta se quelle librerie sono open source. Vai avanti e scarica il codice sorgente in tutte le librerie che stai utilizzando, se non l'hai già fatto. La lettura del codice sorgente della libreria è un ottimo modo per diagnosticare e risolvere i problemi, nonché un'opportunità per imparare dal codice di altri programmatori (presumibilmente di qualità abbastanza elevata).
Mike Clark,

2

System.Text.RegularExpressions

Regex è così complesso e così lento. Molto raramente userò Regex e di solito scrivo il mio testo analizzando e abbinando.

Occasionalmente troverò Regex utile per un abbinamento davvero complesso.


Compilate regexp correttamente [o forse System.Text.RegularExpressions è più lento di Perl & co. implementazione]?
Maciej Piechotka,

3
Regex può essere relativamente lento rispetto all'analisi manuale delle stringhe, ma è più veloce di quanto molti credano e di solito più che abbastanza veloce per la maggior parte delle applicazioni pratiche.
Mike Clark,

2
Non penso che questo sia in realtà un reclamo sull'implementazione di .NET in particolare, dal momento che non c'è nulla di particolarmente complesso o lento al riguardo (in effetti, ho trovato che è una delle implementazioni più veloci disponibili). Almeno, questa è stata la mia esperienza. Naturalmente, le espressioni regolari in generale diventano facilmente complesse e c'è sicuramente la tendenza delle persone a usarle in luoghi totalmente inappropriati.
Dean Harding,

2

Non che Delphi4PHP abbia bisogno di cattive stampe, ma l'ho provato (versione 2.0) ed è stato estremamente difficile piegarlo alla mia volontà. Volevo usarlo per creare un'app Web in stile YouTube per consentire ai clienti di visualizzare video di formazione, ma era troppo ingombrante e quando ho provato a combinare i framework PHP (VCL4PHP, Zend, Smarty e Recess) mi sono imbattuto nell'inevitabile, devo rinominare tutto perché non ci sono spazi dei nomi nel problema di PHP 5.

Detto questo, alla fine non mi sono arreso. Ho appena imparato dai miei errori e ho deciso di mantenerlo molto semplice e usare CodeIgniter e FlowPlayer (con JQuery).

Ho il desiderio che qualunque framework faccia uscire vivo da PHP 5, PHP 6 avrà dei fantastici framework che potrebbero davvero giocare bene insieme.


2

Weka

Faccio molto lavoro di apprendimento automatico e, se mai avessi bisogno di qualcosa di semplice come Naive Bayes o la regressione logistica, adoro abbandonare Weka. Ha buone implementazioni di alcuni algoritmi di machine learning piuttosto complicati, ma l'API è un'API Java di vecchia scuola (pre-generica) eccessivamente orientata agli oggetti. Cose che mi danno fastidio:

  1. Rotola il proprio array ridimensionabile che nient'altro utilizza, garantendo la conversione di occupato.

  2. Molti accoppiamenti sequenziali in cui i metodi devono essere chiamati in un ordine specifico e, a meno che non si faccia davvero attenzione a RTFM, non ce ne accorgeremo.

  3. Ogni istanza deve essere un oggetto Instance e devo dichiarare esplicitamente con un oggetto Attribute sia esso nominale o numerico. Questo porta a un sacco di lavoro occupato a convertire i dati nella forma che Weka vuole. Ciò è particolarmente fastidioso poiché l'API Weka genera così tante eccezioni che la compilazione del codice non significa che probabilmente funzionerà comunque. Se stavo progettando l'API, sarei liberale in ciò che ho accettato (forse solo prendere una serie di oggetti) e solo introspettendo i dati per capire cosa ho ottenuto e qual è la cosa giusta da fare con esso.


2

In un particolare progetto ho abbandonato EJB3. Mi ha dato l'iniezione di dipendenza e la gestione delle transazioni gestite dal container. Ma introduce enormi dipendenze (ad es. JBoss) e ha reso il sistema difficile per cui scrivere test automatici. Ora l'ho ridotto a iniezione di dipendenza del costruttore JPA +.


1

Sputare HTML su una porta di debug su un'app. Avevo bisogno di un modo semplice per ottenere alcuni dati correnti (con aggiornamento automatico). Tirare in una libreria per formattarlo sarebbe stato buono, ma era più semplice stamparlo.

Ho anche rifiutato la libreria per un'altra: usiamo una libreria XML ampia e complessa nella maggior parte delle nostre cose. Dopo aver trascorso 4 ore un giorno a cercare di farlo funzionare in una nuova app, ho appena detto 'bag it' e ho inserito TinyXML. Non è altrettanto potente, ma ci vuole MOLTO meno sforzo per farlo fare cose semplici.


1

Recentemente ho lavorato su un compilatore di linguaggi di scripting che posso usare all'interno delle mie applicazioni. Ne ho usati altri, ma nessuno fa esattamente quello di cui ho bisogno. Quindi ho pensato perché non provare a scrivere il mio? Potrebbe essere un anno o due prima che sia davvero adatto per l'uso generale, ma va bene. Inoltre, è un'ottima esperienza di apprendimento.

Un'altra soluzione "roll my own" sono i pezzi utilizzati per tradurre le mie applicazioni. Ci sono librerie esistenti, ma non mi è piaciuta nessuna. Così ho fatto il mio.

E i componenti del database di Delphi. Li odio. Avere sempre. Così ho creato la mia interfaccia di database che funziona nel modo in cui voglio che funzioni (e esattamente come quello che ho creato per PHP, facilitando la codifica in più lingue).

Fondamentalmente, quando mi viene data un'opzione, di solito finisco per creare la mia biblioteca.


So cosa vuoi dire. Posso mostrarti un intero arsenale di STL preparato in casa, astrazione di DB, intere lingue con i loro compilatori o interpreti, e cosa no. In genere non è il benvenuto dai tuoi colleghi e dirigenti, ma quale programmatore che non ha mai scritto un compilatore anche se a nessuno importava?
Mojuba,

0

Oh, così tanti. Ho lavorato su alcuni progetti agili usando API open source. Fantastico quando funzionano, ma spesso abbiamo sofferto sviluppatori con un feticcio per aver portato ogni sorta di API di terze parti, alcune oscure, altre no, solo perché vogliono usare una o due classi in esse. Il risultato finale è un miscuglio di codice e ha violato i sistemi. Lo consegnano affermando che è il miglior codice di sempre, se ne vanno e i poveri slogan che lo raccolgono trovano un pasticcio incomprensibile e privo di documenti pieno di problemi di dipendenza e hack.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.