Che cos'è un framework software? [chiuso]


194

Qualcuno può spiegarmi cos'è un framework software? Perché abbiamo bisogno di un quadro? Cosa fa un framework per facilitare la programmazione?

Risposte:


422

Sono in ritardo per rispondere. Ma vorrei condividere un esempio, a cui ho pensato solo oggi. Se ti dicessi di tagliare un pezzo di carta con dimensioni 5m per 5m, sicuramente lo faresti. Ma supponiamo che ti chieda di tagliare 1000 pezzi di carta delle stesse dimensioni. In questo caso, non eseguirai la misurazione 1000 volte; ovviamente, faresti una cornice di 5m per 5m, e con l'aiuto di essa potresti tagliare 1000 pezzi di carta in meno tempo. Quindi, quello che hai fatto è stato creare un framework che avrebbe svolto un tipo specifico di attività. Invece di eseguire lo stesso tipo di attività ancora e ancora per lo stesso tipo di applicazioni, si crea un framework con tutte quelle strutture insieme in un bel pacchetto, fornendo quindi l'astrazione per la propria applicazione e, soprattutto, molte applicazioni.


27
Vorrei sapere il motivo del voto negativo della risposta. Mi aiuterà a migliorarlo.
Neha Choudhary,

4
bello molto facile da capire ........... grazie mille
Premkumar

25
@NehaChoudhary, Non io, ma lui -1 perché quello di cui stai parlando è una libreria, non un framework poiché non c'è IoC.
Pacerier,

11
Ho letto il tuo post, ma ciò che pubblichi sembra quello che può fare una biblioteca. Che ne dici di spiegare la differenza tra framework e libreria?
Aaron Liu

2
Non capisco. Da quello che hai spiegato che sarebbe più simile a una biblioteca, giusto?
router

92

Tecnicamente, non è necessario un framework. Se stai creando un sito davvero molto semplice (pensa al Web nel 1992), puoi semplicemente fare tutto con HTML hardcoded e alcuni CSS.

E se vuoi creare una webapp moderna, in realtà non ti serve utilizzare come quadro di riferimento, sia.

Puoi invece scegliere di scrivere tutte le logiche di cui hai bisogno, ogni volta. Puoi scrivere il tuo livello di persistenza / archiviazione dei dati oppure, se sei troppo occupato, scrivere semplicemente un codice SQL personalizzato per ogni singolo accesso al database. Puoi scrivere i tuoi livelli di autenticazione e gestione delle sessioni. E la tua logica di rendering del modello. E la tua logica di gestione delle eccezioni. E le tue funzioni di sicurezza. E il tuo framework di test unitari per assicurarti che tutto funzioni bene. E il tuo ... [continua per molto tempo]

Poi di nuovo, se si fa uso di un quadro , sarete in grado di beneficiare del bene, di solito peer-reviewed e molto ben collaudato lavoro di decine se non centinaia di altri sviluppatori, che potrebbe essere meglio di te. Potrai costruire rapidamente ciò che desideri, senza dover perdere tempo a costruire o preoccuparti troppo degli elementi dell'infrastruttura sopra elencati.

Puoi fare di più in meno tempo e sapere che è molto probabile che il codice del framework che stai usando o estendi sia fatto meglio di te.

E il costo di questo? Investire un po 'di tempo nell'apprendimento del framework. Ma - come praticamente attesterà ogni sviluppatore web là fuori - vale sicuramente la pena dedicare del tempo a imparare a trarre enormi vantaggi (davvero, enormi) dall'uso di qualunque framework tu scelga.


17
Perché non mettere quell'energia nel contribuire a un framework open source, piuttosto che sferzare le tue cose? 'Da soli, possiamo spostare le pietre; insieme possiamo spostare le montagne e tutto il resto
Steve Jalim

7
@Jefffrey "Allora come imparerai? Come crescerai come programmatore?" Impara come vuoi, ma se hai intenzione di lavorare per un vero cliente, dovresti fornire la migliore soluzione possibile nel minor tempo possibile. IL TUO codice "probabilmente difettoso" non è accettabile per questo.
Cmorales,

6
@Cmorales, se si vuole imparare un linguaggio di programmazione o di qualsiasi problema di dominio specifico non si è certo intenzione di avere qualsiasi client "reale" (e avrete forse avete un sacco di tempo nella vostra mano) e che è per questo che suggeriscono neofiti non partire da quadri.
Scarpa,

3
@Jefffrey Nel tuo commento non hai detto nulla dei neofiti, è stato generale. Sono d'accordo che dovresti imparare da solo, ma il tuo commento non lo ha specificato e nella vita reale (lavorativa) non puoi permetterti di usare il codice buggy solo per imparare. Conosco alcuni ragazzi che non usano i framework perché pensano di conoscerli meglio ... e impiegano il doppio del tempo per ogni progetto.
Cmorales,

1
@Cmorales Conosco anche alcune persone che usano i framework ma impiegano anche il doppio del tempo per ogni progetto. La velocità di programmazione non è sempre correlata agli strumenti utilizzati.
Cypher

53

Il sommario di Wikipedia (Software Framework) (primo google hit btw) lo spiega abbastanza bene:

Un framework software, nella programmazione per computer, è un'astrazione in cui il codice comune che fornisce funzionalità generiche può essere selettivamente ignorato o specializzato dal codice utente che fornisce funzionalità specifiche. I frame sono un caso speciale di librerie software in quanto sono riutilizzabili astrazioni di codice racchiuse in una API (Application Programming Interface) ben definita, ma contengono alcune caratteristiche distintive che le separano dalle normali librerie.

I framework software hanno queste caratteristiche distintive che li separano dalle librerie o dalle normali applicazioni utente:

  1. inversione di controllo - In un framework, diversamente dalle librerie o dalle normali applicazioni dell'utente, il flusso di controllo del programma complessivo non è dettato dal chiamante, ma dal framework. [1]
  2. comportamento predefinito : un framework ha un comportamento predefinito. Questo comportamento predefinito deve effettivamente essere un comportamento utile e non una serie di operazioni non consentite.
  3. estensibilità - Un framework può essere esteso dall'utente di solito mediante override selettivo o specializzato per codice utente che fornisce funzionalità specifiche.
  4. codice quadro non modificabile - Il codice quadro, in generale, non può essere modificato. Gli utenti possono estendere il framework, ma non modificarne il codice.

Potresti "averne bisogno" perché potrebbe fornirti un ottimo collegamento durante lo sviluppo di applicazioni, poiché contiene molte funzionalità già scritte e testate. Il motivo è abbastanza simile al motivo per cui utilizziamo le librerie software.


13
la parte bianca della tua risposta è stata molto meglio della parte grigia, in base al tipo di domanda ...
OlimilOops

Sono abbastanza sicuro che la persona che ha posto la domanda abbia trovato anche la voce di Wikipedia ... Probabilmente ha cercato una risposta più completa.
Stophface,

31

Molte buone risposte già, ma fammi vedere se posso darti un altro punto di vista.

Semplificando un po 'le cose, puoi visualizzare un framework come un'applicazione completa ad eccezione della funzionalità effettiva. Colleghi la funzionalità e PRESTO! hai un'applicazione.

Considera, per esempio, un framework GUI. Il framework contiene tutto il necessario per creare un'applicazione. In effetti, spesso puoi semplicemente creare un'applicazione minimale con pochissime righe di sorgente che non fanno assolutamente nulla, ma ti danno la gestione delle finestre, la gestione delle finestre secondarie, i menu, le barre dei pulsanti, ecc. Questo è il lato quadro delle cose. Aggiungendo la funzionalità dell'applicazione e "inserendola" nei punti giusti nel framework, trasformate questa app vuota che non fa altro che la gestione delle finestre, ecc. In una vera e propria applicazione completa.

Esistono tipi simili di framework per app Web, per app lato server, ecc. In ogni caso il framework fornisce la maggior parte del noioso codice ripetitivo (si spera) mentre si fornisce l'effettiva funzionalità del dominio problematico. (Questo è l'ideale. In realtà, ovviamente, il successo del framework è molto variabile.)

Sottolineo ancora che questa è la visione semplificata di cosa sia un quadro. Non sto usando termini spaventosi come "Inversion of Control" e simili, sebbene la maggior parte dei framework abbia incorporati concetti così spaventosi. Dato che sei un principiante, ho pensato di risparmiarti il ​​gergo e di fare una simile similitudine.


14

Non sono sicuro che esista una definizione netta di "framework". A volte un ampio set di librerie è chiamato framework, ma penso che l'uso tipico della parola sia più vicino alla definizione che aioobe ha portato.

Questo bellissimo articolo riassume la differenza tra un solo set di librerie e un framework:

Un framework può essere definito come un insieme di librerie che dicono "Non chiamarci, ti chiameremo".

In che modo ti aiuta un framework? Perché invece di scrivere qualcosa da zero, in pratica estendi semplicemente una data applicazione funzionante. In questo modo ottieni molta produttività - a volte l'applicazione risultante può essere molto più elaborata di quanto avresti potuto fare da sola nello stesso lasso di tempo - ma di solito commerci con molta flessibilità.


8

Una semplice spiegazione è: un framework è un'impalcatura su cui puoi creare applicazioni.

Un framework generalmente fornisce alcune funzionalità di base che è possibile utilizzare ed estendere per rendere più complesse le applicazioni, ci sono framework per ogni sorta di cose. Il framework MVC di Microsofts ne è un buon esempio. Fornisce tutto il necessario per scendere dal sito Web dell'edificio utilizzando il modello MVC, gestisce le richieste Web, i percorsi e simili. Tutto quello che devi fare è implementare "Controller" e fornire "Viste" che sono due costrutti definiti dal framework MVC. Il framework MVC gestisce quindi la chiamata dei controller e il rendering delle visualizzazioni.

Forse non è la migliore espressione, ma spero che sia di aiuto


1
In realtà, è più come costruire applicazioni nell'impalcatura che attorno ad esso.
Jörg W Mittag,

4

al livello più basso, un framework è un ambiente in cui ti viene fornito un set di strumenti con cui lavorare

questi strumenti si presentano sotto forma di librerie, file di configurazione, ecc.

questo cosiddetto "ambiente" fornisce la configurazione di base (segnalazioni di errori, file di registro, impostazioni della lingua, ecc.) ... che può essere modificata, estesa e sviluppata.

Le persone in realtà non hanno bisogno di framework, è solo una questione di voler risparmiare tempo, e altri solo una questione di preferenze personali.

La gente giustifica che con un framework non è necessario codificare da zero. Ma quelle sono solo persone che confondono le librerie con i framework.

Non sono di parte, qui sto attualmente usando un framework.


4

In generale, A frame Work è una struttura reale o concettuale destinata a fungere da supporto o guida per l'edificio qualcosa che espande la struttura in qualcosa di utile ...


2

Un framework fornisce funzionalità / soluzione alla particolare area problematica.
Definizione da wiki :

Un framework software, nella programmazione per computer, è un'astrazione in cui il codice comune che fornisce funzionalità generiche può essere selettivamente ignorato o specializzato dal codice utente che fornisce funzionalità specifiche. I frame sono un caso speciale di librerie software in quanto sono riutilizzabili astrazioni di codice racchiuse in una API (Application Programming Interface) ben definita, ma contengono alcune caratteristiche distintive che le separano dalle normali librerie.


C'è una parola nella prima frase "astrazione". Cosa vuoi dire con questo ? dove usiamo l'astrazione?
Kumaresan Perumal,

2

Un framework ci aiuta a utilizzare il "già creato", una metafora può essere come,

pensare che il materiale terrestre sia il linguaggio di programmazione,

e per esempio "una fotocamera" è il programma e hai deciso di creare un notebook. Non è necessario ricreare la videocamera ogni volta, basta usare la struttura terrestre (ad esempio in un negozio di tecnologia) per prendere la videocamera e integrarla nel notebook.


2

Un framework ha alcune funzioni di cui potresti aver bisogno. potresti aver bisogno di una sorta di array con meccanismi di ordinamento integrati. O forse hai bisogno di una finestra in cui desideri posizionare alcuni controlli, tutto ciò che puoi trovare in un framework. è una specie di LAVORO che abbraccia un TELAIO attorno al tuo lavoro.

EDIT: OK Sto per scavare quello che stavate cercando di dirmi;) forse non avete notato le informazioni tra le righe "WORK che attraversa un TELAIO in giro ..." prima che cadano sempre più in profondità. Cerco di dargli una parola sperando che tu sia gentile:
una buona spiegazione alla domanda "Differenza tra una biblioteca e un quadro" che ho trovato qui
http://ifacethoughts.net/2007/06/04/difference-b Between- a-libreria-e-un-framework /


totalmente non capisco i voti negativi ... ne sono completamente sbalordito. la domanda è il tipo di domanda di base per principianti e la mia risposta era secondo quella abbastanza buona ...
OlimilOops

4
Per essere chiari: non ho votato per difetto. Tuttavia, ciò di cui stai parlando è a un livello molto più basso di quello di cui si preoccupa un framework. Le raccolte e gli algoritmi di ordinamento sono ad esempio più librerie standard di Frameworks.
Bakkal,

1
grazie per la risposta ma ... non è la risposta alla mia domanda. secondo la domanda di OP, distinguere tra "libreria standard" e "framework" è il posto sbagliato qui. ad es. nel framework .net puoi trovare le raccolte dello spazio dei nomi in una parte del framework che non ho mai sentito nessuno dire che la raccolta dello spazio dei nomi non fa parte del .netframework. quindi la tua risposta alla mia domanda è sbagliata
OlimilOops

1
Questa è la definizione di una biblioteca . Manca il tratto distintivo di un framework rispetto a una libreria: Inversion of Control .
Jörg W Mittag,

2

Al di là delle definizioni, che a volte sono comprensibili solo se capisci già, un esempio mi ha aiutato.

Penso di avere avuto un barlume di comprensione cercando di ordinare un elenco in .Net; un esempio di un framework che fornisce una funzionalità personalizzata dal codice utente che fornisce funzionalità specifiche. Take List.Sort (IComparer). L'algoritmo di ordinamento, che risiede nel framework .Net nel metodo Sort, deve eseguire una serie di confronti; l'oggetto A viene prima o dopo l'oggetto B? Ma l'ordinamento stesso non ha idea di come fare il confronto; solo il tipo da ordinare lo sa. Non è stato possibile scrivere un algoritmo di ordinamento di confronto che può essere riutilizzato da molti utenti e anticipare tutti i vari tipi su cui verrebbe richiesto l'ordinamento. Devi lasciare quel po 'di lavoro all'utente stesso. Quindi qui, l'ordinamento, noto anche come framework, richiama un metodo nel codice utente, il tipo viene ordinato in modo che possa fare il confronto. (O un delegato può essere utilizzato;

Ho capito bene?

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.