Risposte:
Se un framework è supponente, ti blocca o ti guida nel loro modo di fare le cose.
Ad esempio: alcune persone credono che un sistema modello non dovrebbe fornire accesso a metodi e funzioni definiti dall'utente in quanto lascia il sistema aperto alla restituzione di HTML non elaborato. Quindi uno sviluppatore di framework supponente consente solo l'accesso alle strutture di dati. In base alla progettazione, il software sta limitando e incoraggia il progettista a fare le cose a modo suo.
Un altro esempio ( preso dal collegamento dei segnali ) è quello del wiki . I progettisti di wiki avevano molte opinioni. Pensavano che l'HTML fosse troppo complicato per essere scritto dalle persone, quindi hanno escogitato quello che ritenevano fosse un modo più naturale di aggiornare i contenuti. Lo hanno anche spogliato del design elegante perché sentivano che il focus doveva essere più sul contenuto che sul design.
Apple ha opinioni forti quando progetta i suoi prodotti.
La progettazione di software non ponderata è più simile a PERL / PHP. Permette allo sviluppatore e si fida dello sviluppatore di prendere le giuste decisioni e mette più controllo nelle loro mani.
Vorrei anche posizionare Microsoft nella colonna non supponente. Un buon esempio di un quadro Microsoft, che è un-opininated: .NET
. Aprendo il CLR e le specifiche, lo ha aperto a tutti i tipi di lingue e stili di implementazione.
Un software considerato significa che esiste fondamentalmente un modo (il modo giusto ™) per fare le cose e provare a farlo diversamente sarà difficile e frustrante. D'altra parte, fare le cose nel modo giusto ™ può rendere molto semplice lo sviluppo con il software poiché il numero di decisioni che devi prendere è ridotto e la capacità dei progettisti di software di concentrarsi sul far funzionare il software aumenta. Il software supposto può essere ottimo da usare, se fatto bene, se il tuo problema si adatta perfettamente alla soluzione. Può essere una vera seccatura risolvere quelle parti del tuo problema che non si associano agli strumenti forniti. Un esempio qui sarebbe Ruby on Rails.
Il software non supponente, d'altra parte, lascia molta flessibilità all'utente (sviluppatore). Non prescrive un metodo per risolvere un problema, ma fornisce strumenti flessibili che possono essere utilizzati per risolvere il problema in molti modi. L'aspetto negativo di questo può essere che, poiché gli strumenti sono così flessibili, può essere relativamente difficile sviluppare qualsiasi soluzione. Molto più della soluzione potrebbe dover essere codificata a mano dall'utente (sviluppatore) perché il framework non fornisce abbastanza aiuto. Devi anche pensare molto di più su come fornire una soluzione e gli sviluppatori mediocri potrebbero finire con soluzioni più povere che se avessero acquistato un software supponente. PERL è probabilmente il classico esempio di software non supponente.
Il mio ideale è un quadro non supponente, ma con convenzioni forti. Vorrei mettere ASP.NET MVC in questa categoria. In realtà tutto il software è considerato in una certa misura (sebbene forse non PERL). MVC ha convenzioni solide nella scelta del modello, ma offre molti modi diversi per risolvere i problemi all'interno di tali convenzioni. Alcuni di questi modi possono persino rompere il modello. Utilizzato correttamente, tuttavia, in conformità con le convenzioni che si sviluppano in tale ambito può essere una vera gioia.
Fondamentalmente è un software che funziona nel modo in cui i suoi autori pensano che dovrebbe funzionare, invece di cercare di soddisfare tutti. Ciò significa che a molte persone non piacerà, ma quelli che lo adoreranno.
Rails è probabilmente l'esempio canonico di un framework supponente: fai le cose a modo loro e tutto è liscio. Se non lo fai, hai un po 'di dolore. Ma va bene - se non vuoi fare le cose a modo loro, non vuoi usare Rails.
Per motivi di equilibrio, fornirò una descrizione (piuttosto supponente) più favorevole all'approccio supponente (in contrasto con alcune delle altre risposte).
I framework commentati forniscono un "percorso d'oro", che dovrebbe essere la migliore pratica per la maggior parte delle persone e per la maggior parte degli scenari (agli occhi degli autori).
Questo, tuttavia, non significa necessariamente blocco. Significa che potrebbe essere necessario uno sforzo extra per fare le cose in modo diverso.
I quadri meno ponderati offrono una serie di opzioni diverse e lasciano a voi la decisione.
I framework ponderati di solito rimuovono l'onere dello sviluppatore di reinventare la ruota o ripensare lo stesso problema ancora e ancora e quindi aiutare a concentrarsi sul problema reale a portata di mano.
Nel mondo open source puoi trovare molti framework supponente ma in competizione, quindi hai ancora una scelta. Devi solo scegliere il tuo percorso d'oro.
Il software supponente è costruito e progettato in modo tale da semplificare le operazioni in un determinato modo. Favorisce alcuni modelli di design più di altri. Nel processo rende difficile deviare dallo stile di sviluppo del software per il quale è stato sviluppato. Un altro modo di dirlo è che favorisce la "Convenzione sulla configurazione". cioè, le opzioni di configurazione sono molto limitate poiché il software assume molti aspetti della configurazione. Il software supponente di solito è più veloce da padroneggiare una volta comprese le ipotesi.
D'altro canto il software non motivato fa alcune ipotesi. Di conseguenza, i framework di sviluppo software / software che non sono stati proposti spesso tendono ad avere molte opzioni di configurazione. Uno sviluppatore in genere deve prendere molte decisioni in merito a vari aspetti del software. Spesso vengono sviluppati vari strumenti per facilitare la gestione di queste enormi opzioni. ad es. Visual Studio .NET per .NET, Eclipse IDE per Java ecc. Il software non orientato richiede in genere più tempo per il master rispetto al software supponente.
tl; dr :
Molte persone si riferiscono ad ASP.NET MVC come a un framework "nonopinionated", e volevo solo ponderare con un paio di pensieri su questo.
È vero che ASP.NET MVC non impone troppo; puoi usare qualunque soluzione di persistenza ti piaccia, sia Linq-to-SQL, entità ADO.NET, NHibernate, ecc.
D'altro canto, il framework MVC tende a favorire la "convenzione sulla configurazione", per citare Phil Haack, che suggerisce fortemente di seguire il modello predefinito per localizzare controller, viste, modelli e altro codice. Sebbene sia possibile modificare questo comportamento, è più facile nuotare con la corrente e, per la maggior parte delle persone, non c'è alcun problema a farlo.
Anche ASP.NET MVC che circonda sono molte persone supponente, che trovo conducano a molti tutorial distorti che insistono sulla copertura, ad esempio test di unità e iniezione di dipendenza; Sono tutto per una buona prova e la separazione delle preoccupazioni, ma percepisco che tali argomenti sono un po 'spinti in gola un po', spesso prima di coprire basi più utili.
Anche in questo caso, devo ammettere che all'interno di quelle aree, il framework stesso è completamente aperto all'adozione di qualsiasi soluzione di test unitario che desideri, nonché di qualsiasi framework di iniezione e derisione delle dipendenze che desideri utilizzare, quindi immagino che fornisca un altro esempio di flessibilità, anche all'interno del "bashing bibbia" dei test unitari, ecc. che sembra stia succedendo.
È la quantità di convenzioni implementate in un framwork e il numero di decisioni che sono state prese.
Se, ad esempio, ci sono 5 (o più) modi diversi per inviare i dati del modulo a un'azione del controller (come nel caso di ASP.NET MVC), il framework sembra essere piuttosto "non motivato" - la decisione è presa a te!
Se, tuttavia, il framework consente (o disabilitando direttamente altri modi o incoraggiandolo fortemente) solo un modo di fare quella cosa (come nel caso di Fubu MVC), si potrebbe dire che la decisione è stata presa dal framework , rendendo così il quadro supponente.
L'esempio che vedrai molto al momento è il framework MVC ASP.NET. È incredibilmente estensibile ma questa è la sua caduta per alcuni aspetti, non c'è carne. Vuoi accedere ai dati? Dovrai scriverlo tu stesso. Vuoi un po 'di AJAX? Idem.
Tuttavia, poiché è altamente estensibile, se ci si basa su di esso è possibile trasformarlo in un quadro supponente. Questo è ciò che fanno gli artisti del calibro di MVCContrib , che ti danno metodi specifici per fare le cose, il che significa che devi scrivere meno codice.
Ciò significa che se si desidera discostarsi dall'opinione, spesso c'è più lavoro da fare che se si stesse lavorando alla versione vanilla. Questo è uno scenario 80/20 però. Se hai scelto correttamente il tuo framework supponente, vorrai solo rompere le opinioni il 20% delle volte e sarai altamente produttivo l'altro 80% delle volte.