Domanda

Vedo spesso persone che affermano che un determinato software è "molto supponente" o che Microsoft tende a scrivere "non motivato" quadri. Cosa significa in realtà?

È stato utile?

Soluzione

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 poiché 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 di wiki . I progettisti di wiki avevano molte opinioni. Pensavano che l'HTML fosse troppo complicato per essere scritto dalle persone, quindi hanno trovato 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.

Progettazione software non motivata è 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 framework Microsoft non considerato appropriato: .NET . Aprendo il CLR e le specifiche, lo ha aperto a tutti i tipi di linguaggi e stili di implementazione.

Altri suggerimenti

Software considerato significa che esiste fondamentalmente un modo (il modo giusto & # 8482;) di fare le cose e provare a farlo diversamente sarà difficile e frustrante. D'altra parte, fare le cose nel modo giusto & # 8482; può semplificare lo sviluppo con il software in quanto il numero di decisioni da prendere è ridotto e la capacità dei progettisti di software di concentrarsi sul funzionamento del 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 rispetto a 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 quadro 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 supponente offrono una serie di opzioni diverse e lasciano a voi la decisione.

I framework commentati di solito rimuovono l'onere dallo sviluppatore di reinventare la ruota o ripensare lo stesso problema ancora e ancora e quindi aiutare a concentrarsi sul vero problema in questione.

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 considerato è 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 per 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. per esempio. 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 :

  • Opinione : ad es. Ruby on Rails . C'è un modo particolarmente preferito di fare le cose, e ottieni molto supporto nel fare le cose in quel modo. Fare le cose in altri modi è difficile o impossibile per alcuni sistemi (mi viene in mente Cassandra).
  • Non motivato : ad es. Perl 5 . Puoi fare tutto quello che vuoi, come vuoi, in qualsiasi stile. Tutti gli stili sono ugualmente aperti, validi e supportati.

Molte persone si riferiscono ad ASP.NET MVC come a un "non inventato" framework, 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'altra parte, 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 ci sono problemi a farlo.

Anche attorno ad ASP.NET MVC ci sono molte persone supposte, che trovo conducano a molti tutorial distorti che insistono sulla copertura, ad es. unit test e iniezione di dipendenza; Sono tutto per una buona prova e la separazione delle preoccupazioni, ma percepisco che tali argomenti sono spinti un po 'in gola, 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 di unità 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 della bibbia" di unit test, ecc. che sembra essere in corso.

È 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 spetta a te!

Se, tuttavia, il framework abilita (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 framework 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 framework supponente. Questo è ciò che piace a MVCContrib , ti danno metodi specifici di fare le cose che significa che devi scrivi 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top