Qual é a diferença entre um framework e uma biblioteca?

Qual é a diferença entre um framework e uma biblioteca ?

Eu sempre pensei em uma biblioteca como um conjunto de objects e funções que é focado em resolver um problema em particular ou em torno de uma área específica de desenvolvimento de aplicativos (ou seja, access ao database); Por outro lado, uma estrutura é uma coleção de bibliotecas cinputs em torno de uma metodologia específica (por exemplo, MVC) e abrange todas as áreas de desenvolvimento de aplicativos.

Na verdade, esses termos podem significar muitas coisas diferentes dependendo do contexto em que são usados.

Por exemplo, no Mac OS X, as estruturas são apenas bibliotecas, agrupadas em um pacote. Dentro do pacote, você encontrará uma biblioteca dinâmica real (libWhatever.dylib). A diferença entre uma biblioteca nua e a estrutura no Mac é que uma estrutura pode conter várias versões diferentes da biblioteca. Ele pode conter resources extras (imagens, cadeias localizadas, arquivos de dados XML, objects da interface do usuário etc.) e, a menos que a estrutura seja liberada para pública, ela geralmente contém os arquivos .h necessários para usar a biblioteca.

Assim você tem tudo dentro de um único pacote que você precisa para usar a biblioteca em sua aplicação (uma biblioteca C / C ++ / Objective-C sem arquivos .h é bastante inútil, a menos que você mesmo os escreva de acordo com alguma documentação da biblioteca) Um monte de arquivos para se movimentar (um pacote do Mac é apenas um diretório no nível Unix, mas a interface do usuário o trata como um único arquivo, praticamente como você tem arquivos JAR em Java e quando você clica nele, geralmente não o que está dentro, a menos que você selecione explicitamente para mostrar o conteúdo).

Wikipedia chama framework de “buzzword”. Ele define uma estrutura de software como

Uma estrutura de software é um design reutilizável para um sistema de software (ou subsistema). Uma estrutura de software pode include programas de suporte, bibliotecas de código, uma linguagem de script ou outro software para ajudar a desenvolver e colar os diferentes componentes de um projeto de software. Várias partes do framework podem ser expostas através de uma API.

Então eu diria que uma biblioteca é apenas isso, “uma biblioteca”. É uma coleção de objects / funções / methods (dependendo da sua linguagem) e sua aplicação “liga” contra ela e assim pode usar os objects / funções / methods. É basicamente um arquivo contendo código reutilizável que geralmente pode ser compartilhado entre vários aplicativos (você não precisa escrever o mesmo código repetidas vezes).

Um framework pode ser tudo o que você usa no desenvolvimento de aplicativos. Pode ser uma biblioteca, uma coleção de muitas bibliotecas, uma coleção de scripts ou qualquer software necessário para criar seu aplicativo. Framework é apenas um termo muito vago.

Aqui está um artigo sobre um cara sobre o tema ” Biblioteca vs. Framework “. Eu pessoalmente acho que este artigo é altamente discutível. Não é errado o que ele está dizendo, no entanto, ele está apenas escolhendo uma das múltiplas definições de framework e compara isso com a definição clássica de biblioteca. Por exemplo, ele diz que você precisa de uma estrutura para subsorting. Mesmo? Eu posso ter um object definido em uma biblioteca, posso vinculá-lo e subclassificá-lo no meu código. Eu não vejo como eu preciso de um “framework” para isso. De certa forma, ele explica como o termo framework é usado hoje em dia. É apenas uma palavra sensacionalista, como eu disse antes. Algumas empresas lançam apenas uma biblioteca normal (em qualquer sentido de biblioteca clássica) e a chamam de “framework” porque parece mais chique.

Uma biblioteca executa operações específicas e bem definidas.

Um framework é um esqueleto onde o aplicativo define a “carne” da operação, preenchendo o esqueleto. O esqueleto ainda tem código para ligar as partes, mas o trabalho mais importante é feito pela aplicação.

Exemplos de bibliotecas: protocolos de rede, compression, manipulação de imagens, utilitários de string, avaliação de expressões regulares, matemática. Operações são independentes.

Exemplos de estruturas: sistema de aplicativo da Web, gerenciador de plug-ins, sistema GUI. A estrutura define o conceito, mas o aplicativo define a funcionalidade fundamental com que os usuários finais se importam.

Acho que a principal diferença é que os frameworks seguem o ” princípio de Hollywood “, ou seja, “não nos ligue, vamos chamá-lo”.

Segundo Martin Fowler :

Uma biblioteca é essencialmente um conjunto de funções que você pode chamar, geralmente organizadas em classs. Cada chamada faz algum trabalho e devolve o controle ao cliente.

Um framework incorpora algum design abstrato, com mais comportamentos embutidos. Para usá-lo, você precisa inserir seu comportamento em vários lugares no framework, seja por subclass ou inserindo suas próprias classs. O código da estrutura chama seu código nesses pontos.

Você chama a biblioteca.

Framework chama você.


図 書館 助 け 足 足 場 が 痛 い 多 く の 涙

Biblioteca:

É apenas uma coleção de rotinas (functional programming) ou definições de class (programação orientada a objects). A razão por trás é simplesmente a reutilização de código , ou seja, obter o código que já foi escrito por outros desenvolvedores. As classs ou rotinas normalmente definem operações específicas em uma área específica do domínio . Por exemplo, existem algumas bibliotecas de matemática que podem permitir que o desenvolvedor chame a function sem refazer a implementação de como um algoritmo funciona.

Estrutura:

No framework, todo o stream de controle já está lá, e há um monte de pontos brancos pré-definidos que devemos preencher com o nosso código . Um framework é normalmente mais complexo. Ele define um esqueleto onde o aplicativo define seus próprios resources para preencher o esqueleto. Dessa maneira, seu código será chamado pela estrutura quando apropriado. O benefício é que os desenvolvedores não precisam se preocupar se um design é bom ou não, mas apenas sobre a implementação de funções específicas do domínio.

Biblioteca, estrutura e representação de imagem do seu código:

Biblioteca, estrutura e sua relação de imagem de código

KeyDifference:

A principal diferença entre uma biblioteca e um framework é “Inversion of Control” . Quando você chama um método de uma biblioteca, você está no controle. Mas com uma estrutura, o controle é invertido: a estrutura chama você . Fonte.

Relação:

Ambos definiram API, que é usada pelos programadores para usar. Para colocá-los juntos, podemos pensar em uma biblioteca como uma determinada function de um aplicativo, um framework como o esqueleto do aplicativo, e uma API é um conector para colocá-los juntos. Um processo de desenvolvimento típico normalmente inicia com uma estrutura e preenche as funções definidas nas bibliotecas por meio da API.

Como eu sempre descrevi:

Uma biblioteca é uma ferramenta.

Um Framework é um modo de vida.

Uma biblioteca que você pode usar qualquer pequena parte ajuda você. Um Framework você deve comprometer todo o seu projeto.

Eu gosto de Cohens responder, mas uma definição mais técnica é: Seu código chama uma biblioteca. Um framework chama seu código . Por exemplo, uma estrutura de GUI chama seu código por meio de manipuladores de events. Um framework da web chama seu código por meio de um modelo de resposta de solicitação.

Isso também é chamado de inversão de controle – de repente, o framework decide quando e como executar o seu código, e não o contrário, como acontece com as bibliotecas. Isso significa que um framework também tem um impacto muito maior sobre como você deve estruturar seu código.

Da perspectiva do desenvolvedor da Web:

  1. A biblioteca pode ser facilmente substituída por outra biblioteca. Mas o framework não pode.

    Se você não gosta de biblioteca de selecionador de data de jquery, você pode replace com outro selecionador de data tal como selecionador de data de bootstrap ou pickadate.

    Se você não gosta do AngularJS no qual você construiu seu produto, você não pode simplesmente substituí-lo por outros frameworks. Você tem que rewrite toda a sua base de código.

  2. Principalmente biblioteca leva muito menos curva de aprendizado em comparação com Frameworks. Por exemplo: underscore.js é uma biblioteca, o Ember.js é um framework.

Eu esqueço onde eu vi essa definição, mas eu acho que é bem legal.

Uma biblioteca é um módulo que você chama de seu código e uma estrutura é um módulo que chama seu código.

É assim que penso nisso (e vi racionalizado por outros):

Uma biblioteca é algo contido no seu código. E um framework é um contêiner para seu aplicativo.

aqui está ligado um artigo amargo por Joel Spolsky , mas contém uma boa distinção entre checkboxs de ferramentas, bibliotecas, frameworks e tais

Um framework pode ser feito de diferentes bibliotecas. Vamos dar um exemplo.

Vamos dizer que você quer cozinhar um curry de peixe. Então você precisa de ingredientes como óleo , especiarias e outros utilitários . Você também precisa de peixe, que é a sua base para preparar o seu prato (isto é dados da sua aplicação). todos os ingredientes juntos chamavam uma estrutura . Agora você vai usá-los um por um ou em combinação para fazer o seu curry de peixe, que é o seu produto final . Compare isso com um framework web que é feito de underscore.js , bootstrap.css , bootstrap.js , fontawesome , AngularJS etc. Por exemplo, o Twitter Bootstrap v.35 .

Agora, se você considerar apenas um ingrediente, como o óleo . Você não pode usar qualquer óleo que você quiser, porque isso arruinará seus peixes (dados). Você só pode usar azeite . Compare isso com underscore.js . Agora, o tipo de óleo que você deseja usar depende de você. Algum prato foi feito com azeite americano (underscore.js) ou óleo de oliva indiano (lodash.js). Isso só mudará o gosto do seu aplicativo. Uma vez que eles servem quase a mesma finalidade, seu uso depende da preferência do desenvolvedor e eles são facilmente substituíveis.

insira a descrição da imagem aqui


Framework : Uma coleção de bibliotecas que fornecem propriedades exclusivas e comportamento ao seu aplicativo. (Todos os ingredientes)

Biblioteca : um conjunto bem definido de instruções que fornecem propriedades e comportamentos exclusivos aos seus dados. (Óleo em peixe)

Plugin : Uma compilation de utilitário para uma biblioteca (ui-router -> AngularJS) ou muitas bibliotecas em combinação (data-picker -> bootstrap.css + jQuery) sem as quais seu plugin pode funcionar como esperado.


PS AngularJS é uma estrutura MVC, mas uma biblioteca JavaScript. Porque acredito que a Biblioteca estende o comportamento padrão da tecnologia nativa (JavaScript, neste caso).

Uma biblioteca implementa funcionalidade para fins de escopo restrito, enquanto uma estrutura tende a ser uma coleção de bibliotecas que fornecem suporte para uma variedade maior de resources. Por exemplo, a biblioteca System.Drawing.dll manipula a funcionalidade de desenho, mas é apenas uma parte da estrutura geral do .NET.

Biblioteca – Qualquer conjunto de classs ou componentes que podem ser usados ​​conforme o cliente considere adequado para realizar uma determinada tarefa.
Framework – determina certas diretrizes para você “plug-in” em algo maior que você. Você apenas fornece as peças específicas para sua aplicação / requisitos de uma maneira publicada, de modo que “o framwework pode facilitar sua vida”

As bibliotecas são para facilidade de uso e eficiência.Você pode dizer, por exemplo, que a biblioteca Zend nos ajuda a realizar diferentes tarefas com suas classs e funções bem definidas.Quando uma estrutura é algo que geralmente força uma certa maneira de implementar uma solução, como MVC -view-controller) (referência) . É um sistema bem definido para a distribuição de tarefas como no MVC.Model contém o lado do database, Views são para interface de interface do usuário e controladores são para lógica de negócios.

A inversão de controle é uma parte fundamental do que torna um framework diferente de uma biblioteca. Uma biblioteca é essencialmente um conjunto de funções que você pode chamar, geralmente organizadas em classs. Cada chamada faz algum trabalho e devolve o controle ao cliente.

Um framework incorpora algum design abstrato, com mais comportamento embutido. Para usá-lo, você precisa inserir seu comportamento em vários lugares no framework, seja sub-classificando ou conectando suas próprias classs. O código da estrutura chama seu código nesses pontos.

Acho que você atribuiu muito bem a diferença: o framework fornece um quadro no qual fazemos o nosso trabalho … De alguma forma, é mais “constrangedor” do que uma simples biblioteca.
O framework também deve adicionar consistência a um conjunto de bibliotecas.

Eu acho que biblioteca é um conjunto de utilitários para atingir um objective (por exemplo, sockets, criptografia, etc). Framework é biblioteca + RUNTIME EINVIRONNEMENT. Por exemplo, o ASP.NET é um framework: ele aceita requisições HTTP, cria objects de página, invoca events lyfe cicle, etc. O framework faz tudo isso, você escreve um código que será executado em um momento específico do ciclo de vida do pedido atual!

Enfim, muito interessante questão!

Não me lembro da fonte dessa resposta (acho que a encontrei em um .ppt na internet), mas a resposta é bem simples.

Uma Biblioteca e um Framework são um conjunto de classs, módulos e / ou código (dependendo da linguagem de programação) que podem ser usados ​​em seus aplicativos e ajudam você a resolver um “problema” específico.

Esse problema pode ser registro ou debugging de informações em um aplicativo, desenhar charts, criar um formato de arquivo específico (html, pdf, xls), conectar-se a um database, criar uma parte de um aplicativo ou um aplicativo completo ou um código aplicado a um Padrão de design .

Você pode ter um Framework ou uma Biblioteca para resolver todos esses problemas e muitos mais, normalmente os frameworks ajudam você a resolver problemas mais complexos ou maiores, mas isso é uma conseqüência de sua principal diferença, não uma definição principal para ambos.

A principal diferença entre uma Biblioteca e um Framework é a dependência entre o seu próprio código, em palavras diferentes para usar um Framework você precisa usar quase todas as classs, módulos ou código no FW, mas para usar uma biblioteca você pode usar um ou poucas classs, módulos ou código na lib em sua própria aplicação

Isso significa que, se um Framework tiver, por exemplo, 50 classs para usar o framework em um aplicativo, você precisa usar, digamos, 10-15 ou mais classs em seu código, porque é assim que é projetado um Framework, algumas classs (objects dessas classs) são inputs / parâmetros para methods em outras classs no framework. Veja o framework .NET, Spring, ou qualquer framework MVC.

Mas, por exemplo, uma biblioteca de log, você pode simplesmente usar uma class Log em seu código e ajuda a resolver o “problema de logging”, isso não significa que a biblioteca de log não tenha mais classs em seu código, como classs para manipular arquivos, manipular saídas de canvas ou até mesmo bases de dados, mas você nunca toca / usa essas classs em seu código, e essa é a razão de por que é uma biblioteca e não uma estrutura.

E também há mais categorias do que Frameworks e Bibliotecas, mas isso está fora do tópico.

Sua interpretação parece muito boa para mim … Uma biblioteca pode ser qualquer coisa que seja compilada e auto-suficiente para reutilização em outro código, não há literalmente nenhuma restrição em seu conteúdo.

Por outro lado, espera-se que um framework tenha uma série de resources para uso em alguma área específica de desenvolvimento de aplicativos, assim como seu exemplo, o MVC.