frameworks - traduccion - ¿Cuál es la diferencia entre un marco y una biblioteca?
que es un framework web (20)
Biblioteca:
Es solo una colección de rutinas (programación funcional) o definiciones de clase (programación orientada a objetos). La razón detrás es simplemente la reutilización del código , es decir, obtener el código que ya ha sido escrito por otros desarrolladores. Las clases o rutinas normalmente definen operaciones específicas en un área específica del dominio . Por ejemplo, hay algunas bibliotecas de matemáticas que pueden permitir al desarrollador simplemente llamar a la función sin rehacer la implementación de cómo funciona un algoritmo.
Marco de referencia:
En el marco, todo el flujo de control ya está allí, y hay un montón de puntos blancos predefinidos que debemos completar con nuestro código . Un marco es normalmente más complejo. Define un esqueleto donde la aplicación define sus propias características para completar el esqueleto. De esta manera, su código será llamado por el marco cuando sea apropiado. El beneficio es que los desarrolladores no necesitan preocuparse por si un diseño es bueno o no, sino simplemente por implementar funciones específicas de dominio.
Biblioteca, marco y representación de su código de imagen:
KeyDifference:
La diferencia clave entre una biblioteca y un marco es "Inversión de control" . Cuando llamas a un método desde una biblioteca, tienes el control. Pero con un marco, el control se invierte: el marco te llama . Source.
Relación:
Ambos definieron la API, que se utiliza para que los programadores la utilicen. Para ponerlos juntos, podemos pensar en una biblioteca como una función determinada de una aplicación, un marco como el esqueleto de la aplicación, y una API es un conector para unirlos. Un proceso de desarrollo típico normalmente comienza con un marco y completa las funciones definidas en las bibliotecas a través de la API.
¿Cuál es la diferencia entre un marco y una biblioteca ?
Siempre pensé en una biblioteca como un conjunto de objetos y funciones que se centran en resolver un problema particular o en un área específica de desarrollo de aplicaciones (es decir, acceso a bases de datos); un marco, por otro lado, es una colección de bibliotecas centradas alrededor de una metodología particular (es decir, MVC) y cubre todas las áreas de desarrollo de aplicaciones.
Aquí se vincula un artículo amargo de Joel Spolsky , pero contiene una buena distinción entre cajas de herramientas, bibliotecas, marcos y otros.
Así es como lo pienso (y he visto racionalizado por otros):
Una biblioteca es algo contenido dentro de su código. Y un marco es un contenedor para su aplicación.
Biblioteca: cualquier conjunto de clases o componentes que pueda usarse como el cliente considere adecuado para realizar una determinada tarea.
Marco: exige ciertas pautas para que se "conecte" en algo más grande que usted. Simplemente proporciona las piezas específicas de su aplicación / requisitos de una manera requerida por la publicación, de modo que ''el trabajo de marcos pueda hacer su vida más fácil''
Como siempre lo he descrito:
Una biblioteca es una herramienta.
Un marco es una forma de vida.
Una biblioteca que puedes usar en cualquier parte pequeña te ayuda. Un Framework al que debes comprometer todo tu proyecto.
Creo que la biblioteca es un conjunto de utilidades para alcanzar un objetivo (por ejemplo, sockets, criptografía, etc.). Framework is library + RUNTIME EINVIRONNEMENT. Por ejemplo, ASP.NET es un marco: acepta solicitudes HTTP, crea un objeto de página, invoca eventos de ciclo de vida, etc. Marco hace todo esto, escribe un bit de código que se ejecutará en un momento específico del ciclo de vida de solicitud actual!
De todos modos, pregunta muy interesante!
Creo que la principal diferencia es que los marcos siguen el " principio de Hollywood ", es decir, "no nos llames, te llamaremos".
Según Martin Fowler :
Una biblioteca es esencialmente un conjunto de funciones a las que puedes llamar, en estos días generalmente organizadas en clases. Cada llamada hace algún trabajo y devuelve el control al cliente.
Un marco incorpora un diseño abstracto, con más comportamiento incorporado. Para usarlo, necesita insertar su comportamiento en varios lugares del marco, ya sea mediante subclases o conectando sus propias clases. El código del marco luego llama a su código en estos puntos.
Creo que notó bastante bien la diferencia: el marco proporciona un marco en el que hacemos nuestro trabajo ... De alguna manera, es más "restrictivo" que una simple biblioteca.
El marco también se supone que agrega consistencia a un conjunto de bibliotecas.
Desde la perspectiva del desarrollador web:
La biblioteca puede ser fácilmente reemplazable por otra biblioteca. Pero el marco no puede.
Si no le gusta la biblioteca de jquery date picker, puede reemplazarla con otro selector de fecha, como el selector de fecha o pickadate.
Si no le gusta AngularJS en el que construyó su producto, no puede simplemente reemplazarlo con ningún otro marco. Tienes que reescribir todo tu código base.
En su mayoría, la biblioteca tiene una curva de aprendizaje muy inferior en comparación con los marcos. Por ejemplo: underscore.js es una biblioteca, Ember.js es un marco.
En realidad, estos términos pueden significar muchas cosas diferentes según el contexto que se utilicen.
Por ejemplo, en Mac OS X los marcos son solo bibliotecas, agrupadas en un paquete. Dentro del paquete encontrará una biblioteca dinámica real (libWhatever.dylib). La diferencia entre una biblioteca simple y el marco en Mac es que un marco puede contener varias versiones diferentes de la biblioteca. Puede contener recursos adicionales (imágenes, cadenas localizadas, archivos de datos XML, objetos de IU, etc.) y, a menos que el marco se publique, generalmente contiene los archivos .h necesarios para usar la biblioteca.
Por lo tanto, tiene todo en un solo paquete que necesita para usar la biblioteca en su aplicación (una biblioteca C / C ++ / Objective-C sin archivos .h es bastante inútil, a menos que los escriba de acuerdo con la documentación de la biblioteca) un montón de archivos para moverse (un paquete de Mac es solo un directorio en el nivel de Unix, pero la interfaz de usuario lo trata como un solo archivo, casi como si tuvieras archivos JAR en Java y cuando haces clic en él, generalmente no ves lo que hay dentro, a menos que seleccione explícitamente mostrar el contenido).
Wikipedia llama al marco una "palabra de moda". Define un marco de software como
Un marco de software es un diseño reutilizable para un sistema de software (o subsistema). Un marco de software puede incluir programas de soporte, bibliotecas de códigos, un lenguaje de scripting u otro software para ayudar a desarrollar y unir los diferentes componentes de un proyecto de software. Varias partes del marco pueden ser expuestas a través de una API.
Así que yo diría que una biblioteca es solo eso, "una biblioteca". Es una colección de objetos / funciones / métodos (dependiendo de su idioma) y su aplicación se "vincula" con ella y, por lo tanto, puede usar los objetos / funciones / métodos. Básicamente, es un archivo que contiene código reutilizable que generalmente se puede compartir entre varias aplicaciones (no es necesario escribir el mismo código una y otra vez).
Un framework puede ser todo lo que uses en el desarrollo de aplicaciones. Puede ser una biblioteca, una colección de muchas bibliotecas, una colección de scripts o cualquier pieza de software que necesite para crear su aplicación. El marco es sólo un término muy vago.
Aquí hay un artículo sobre un tipo relacionado con el tema " Biblioteca vs. Marco ". Personalmente creo que este artículo es altamente discutible. Sin embargo, no está mal lo que dice allí, simplemente está seleccionando una de las múltiples definiciones de marco y la compara con la definición clásica de biblioteca. Por ejemplo, él dice que necesitas un marco para la subclasificación. De Verdad? Puedo tener un objeto definido en una biblioteca, puedo vincularlo y subclasificarlo en mi código. No veo cómo necesito un "marco" para eso. De alguna manera, explica cómo se usa el término marco en la actualidad. Es solo una palabra exagerada, como dije antes. Algunas compañías lanzan solo una biblioteca normal (en cualquier sentido de una biblioteca clásica) y la llaman un "marco" porque suena más sofisticado.
La inversión de control es una parte clave de lo que hace que un marco sea diferente a una biblioteca. Una biblioteca es esencialmente un conjunto de funciones a las que puedes llamar, en estos días generalmente organizadas en clases. Cada llamada hace algún trabajo y devuelve el control al cliente.
Un marco incorpora un diseño abstracto, con más comportamiento incorporado. Para usarlo, necesita insertar su comportamiento en varios lugares del marco, ya sea mediante una subclasificación o mediante el complemento de sus propias clases. El código del marco luego llama a su código en estos puntos.
Las bibliotecas son fáciles de usar y eficientes. Puede decir, por ejemplo, que la biblioteca Zend nos ayuda a realizar diferentes tareas con sus clases y funciones bien definidas. Mientras que un marco es algo que generalmente obliga a cierta forma de implementar una solución, como MVC (Modelo -view-controller) (reference) . Es un sistema bien definido para la distribución de tareas como en MVC. El modelo contiene el lado de la base de datos, las vistas son para la interfaz de la interfaz de usuario y los controladores para la lógica empresarial.
Llamas a la biblioteca.
Marco te llama.
書館
Me gusta la respuesta de Cohens, pero una definición más técnica es: Su código llama a una biblioteca. Un framework llama a tu código . Por ejemplo, un marco GUI llama a su código a través de controladores de eventos. Un framework web llama a su código a través de algún modelo de solicitud-respuesta.
Esto también se denomina inversión de control : de repente, el marco decide cuándo y cómo ejecutar el código, y no al revés, como ocurre con las bibliotecas. Esto significa que un marco también tiene un impacto mucho mayor en la forma en que debe estructurar su código.
No recuerdo la fuente de esta respuesta (creo que la encontré en un .ppt en Internet), pero la respuesta es bastante simple.
Una biblioteca y un marco son un conjunto de clases, módulos y / o códigos (según el lenguaje de programación) que se pueden usar en sus aplicaciones y le ayudan a resolver un "problema" específico.
Ese problema puede ser registrar o depurar información en una aplicación, dibujar gráficos, crear un formato de archivo específico (html, pdf, xls), conectarse a una base de datos, crear una parte de una aplicación o una aplicación completa o un código aplicado a una Patrón de diseño .
Puede tener un Marco o una Biblioteca para resolver todos estos problemas y muchos más, normalmente los marcos le ayudan a resolver problemas más complejos o más grandes, pero esto es una consecuencia de su diferencia principal, no una definición principal para ambos.
La diferencia principal entre una Biblioteca y un Marco es la dependencia entre su propio código, en otras palabras para usar un Marco necesita usar casi todas las clases, módulos o códigos en el FW, pero para usar una Biblioteca puede usar uno o Algunas clases, módulos o código en la biblioteca en tu propia aplicación.
Esto significa que si un Marco tiene, por ejemplo, tiene 50 clases para usar el marco en una aplicación que necesita usar, digamos, 10-15 o más clases en su código, porque así es como se diseña un Marco, algunos las clases (objetos de esas clases) son entradas / parámetros para métodos en otras clases en el marco. Consulte el marco .NET, Spring o cualquier marco MVC.
Pero, por ejemplo, una biblioteca de registro, puede usar una clase de registro en su código y le ayuda a resolver el "problema de registro", lo que no significa que la biblioteca de registro no tenga más clases en su código, como las clases para manejar archivos, manejar salidas de pantalla o incluso bases de datos, pero nunca toca / usa esas clases en su código, y esa es la razón de por qué es una biblioteca y no un marco.
Y también hay más categorías que marcos y bibliotecas, pero eso está fuera de tema.
Olvidé donde vi esta definición, pero creo que es bastante agradable.
Una biblioteca es un módulo al que llama desde su código, y un marco es un módulo que llama a su código.
Su interpretación me suena bastante bien ... Una biblioteca puede ser cualquier cosa compilada y autocontenida para su reutilización en otro código, literalmente no hay restricciones en su contenido.
Por otro lado, se espera que un marco tenga una gama de instalaciones para su uso en algún ámbito específico de desarrollo de aplicaciones, como su ejemplo, MVC.
Un marco puede estar hecho de diferentes bibliotecas. Tomemos un ejemplo.
Digamos que quieres cocinar un curry de pescado. Entonces necesitas ingredientes como aceite , especias y otros servicios . También necesita pescado, que es su base para preparar su plato (esto es información de su aplicación). Todos los ingredientes juntos llamados un marco . Ahora los usará uno por uno o en combinación para hacer su curry de pescado, que es su producto final . Compare eso con un marco web que está hecho de underscore.js , bootstrap.css , bootstrap.js , fontawesome , AngularJS , etc. Por ejemplo, Twitter Bootstrap v.35 .
Ahora, si consideras solo un ingrediente, como decir aceite . No puedes usar el aceite que quieras porque entonces arruinará tu pescado (datos). Solo se puede utilizar aceite de oliva . Compare eso con underscore.js . Ahora, la marca de aceite que quieras usar depende de ti. Algunos platos se hicieron con aceite de oliva americano (underscore.js) o aceite de oliva indio (lodash.js). Esto solo cambiará el gusto de su aplicación. Ya que tienen casi el mismo propósito, su uso depende de las preferencias del desarrollador y son fácilmente reemplazables.
Marco : una colección de bibliotecas que proporcionan propiedades y comportamientos únicos a su aplicación. (Todos los ingredientes)
Biblioteca : un conjunto bien definido de instrucciones que proporcionan propiedades y comportamiento únicos a sus datos. (Óleo sobre pescado)
Complemento : una compilación de utilidad para una biblioteca (ui-router -> AngularJS) o muchas bibliotecas en combinación (selector de fecha -> bootstrap.css + jQuery) sin la cual su complemento ahora podría funcionar como se esperaba.
PS AngularJS es un framework MVC pero una biblioteca de JavaScript. Porque creo que la biblioteca amplía el comportamiento predeterminado de la tecnología nativa (JavaScript en este caso).
Una biblioteca realiza operaciones específicas, bien definidas.
Un marco es un esqueleto donde la aplicación define la "carne" de la operación al completar el esqueleto. El esqueleto aún tiene código para vincular las partes, pero la aplicación realiza el trabajo más importante.
Ejemplos de bibliotecas: protocolos de red, compresión, manipulación de imágenes, utilidades de cadenas, evaluación de expresiones regulares, matemáticas. Las operaciones son autónomas.
Ejemplos de marcos: sistema de aplicación web, administrador de complementos, sistema GUI. El marco define el concepto, pero la aplicación define la funcionalidad fundamental que les interesa a los usuarios finales.
Una biblioteca implementa funcionalidad para un propósito de ámbito estrecho, mientras que un marco tiende a ser una colección de bibliotecas que brindan soporte para una gama más amplia de características. Por ejemplo, la biblioteca System.Drawing.dll maneja la funcionalidad de dibujo, pero es solo una parte del marco .NET general.