¿Qué es un marco de software? [cerrado]

193

¿Puede alguien explicarme qué es un marco de software? ¿Por qué necesitamos un marco? ¿Qué hace un marco para facilitar la programación?

Ansioso
fuente

Respuestas:

422

Llego muy tarde para responderlo. Pero me gustaría compartir un ejemplo, en el que solo pensaba hoy. Si te dijera que cortaras un trozo de papel con dimensiones de 5m por 5m, entonces seguramente lo harías. Pero supongamos que le pido que corte 1000 trozos de papel de las mismas dimensiones. En este caso, no hará la medición 1000 veces; obviamente, harías un marco de 5m por 5m, y luego, con la ayuda de este, podrás cortar 1000 trozos de papel en menos tiempo. Entonces, lo que hizo fue crear un marco que haría un tipo específico de tarea. En lugar de realizar el mismo tipo de tarea una y otra vez para el mismo tipo de aplicaciones, crea un marco que reúne todas esas facilidades en un solo paquete agradable, lo que proporciona la abstracción para su aplicación y, lo que es más importante, para muchas aplicaciones.

Neha Choudhary
fuente
27
Me gustaría saber el motivo por el que se rechaza la respuesta. Me ayudará a mejorarlo.
Neha Choudhary
44
genial muy fácil de entender ........... muchas gracias
Premkumar
25
@NehaChoudhary, no yo, pero él -1 porque de lo que estás hablando es de una biblioteca, no de un marco ya que no hay IoC.
Pacerier
11
He leído tu publicación, pero lo que publicas suena como lo que puede hacer una biblioteca. ¿Qué tal explicar la diferencia entre framework y biblioteca?
Aaron Liu
2
No entiendo. Por lo que explicaste, sería más como una biblioteca, ¿verdad?
enrutador
92

Técnicamente, no necesitas un marco. Si está creando un sitio realmente simple (piense en la web en 1992), puede hacerlo todo con HTML codificado y algo de CSS.

Y si desea hacer una aplicación web moderna, tampoco necesita usar un marco para eso.

En su lugar, puede elegir escribir toda la lógica que necesita, siempre. Puede escribir su propia capa de almacenamiento / persistencia de datos o, si está demasiado ocupado, simplemente escribir SQL personalizado para cada acceso a la base de datos. Puede escribir sus propias capas de autenticación y manejo de sesión. Y su propia lógica de rending de plantillas. Y su propia lógica de manejo de excepciones. Y sus propias funciones de seguridad. Y su propio marco de prueba de unidad para asegurarse de que todo funcione bien. Y el tuyo ... [continúa durante bastante tiempo]

Por otra parte, si se hace uso de un marco , podrás beneficiarse de la buena, por lo general revisada por expertos y el trabajo de decenas si no cientos de otros desarrolladores, que bien puede ser mejor de lo que muy bien probado. Podrá construir lo que desea rápidamente, sin tener que perder tiempo construyendo o sin preocuparse demasiado por los elementos de infraestructura enumerados anteriormente.

Puede hacer más en menos tiempo y saber que es muy probable que el código marco que está utilizando o extendiendo se haga mejor que usted mismo.

¿Y el costo de esto? Invertir algo de tiempo aprendiendo el marco. Pero, como lo atestiguarán prácticamente todos los desarrolladores web, definitivamente vale la pena el tiempo dedicado a aprender a obtener beneficios masivos (realmente, masivos) al usar el marco que elija.

Steve Jalim
fuente
17
¿Por qué no poner esa energía en contribuir a un marco de código abierto, en lugar de amarrar tus propias cosas? 'Solo, podemos mover rocas; juntos podemos mover montañas 'y todo eso
Steve Jalim
77
@Jefffrey "Entonces, ¿cómo aprenderás? ¿Cómo crecerás como programador?" Aprenda como quiera, pero si tiene la intención de trabajar para un cliente real, debe proporcionar la mejor solución posible en el menor tiempo posible. SU código "probablemente defectuoso" no es aceptable para eso.
Cmorales
66
@Cmorales, si quieres aprender un lenguaje de programación o cualquier problema específico de dominio que seguramente no va a tener ningún cliente "real" (y que posiblemente va a tener una gran cantidad de tiempo en su mano) y que es por lo que sugieren los novatos no comenzar desde marcos.
Zapato
3
@Jefffrey No dijiste nada sobre los novatos en tu comentario, fue general. Estoy de acuerdo en que primero debe aprender por su cuenta, pero su comentario no especificó eso y en la vida real (laboral) no puede permitirse el lujo de usar un código con errores solo para aprender. Conozco a algunos tipos que no usan marcos porque piensan que saben mejor ... y gastan el doble de tiempo en cada proyecto.
Cmorales
1
@Cmorales También conozco a algunas personas que usan marcos, pero que también toman el doble de tiempo para cada proyecto. La velocidad de programación no siempre está relacionada con las herramientas que se utilizan.
Cypher
53

El resumen en Wikipedia (Software Framework) (primer hit de Google por cierto) lo explica bastante bien:

Un marco de software, en la programación de computadoras, es una abstracción en la cual el código común que proporciona funcionalidad genérica puede ser anulado o especializado selectivamente por el código de usuario que proporciona funcionalidad específica. Los marcos son un caso especial de las bibliotecas de software, ya que son abstracciones reutilizables de código envuelto en una interfaz de programación de aplicaciones (API) bien definida, pero contienen algunas características distintivas clave que las separan de las bibliotecas normales.

Los marcos de software tienen estas características distintivas que los separan de las bibliotecas o aplicaciones de usuario normales:

  1. inversión de control : en un marco, a diferencia de las bibliotecas o las aplicaciones de usuario normales, el flujo general de control del programa no lo dicta la persona que llama, sino el marco. [1]
  2. comportamiento predeterminado : un marco tiene un comportamiento predeterminado. Este comportamiento predeterminado debe ser un comportamiento útil y no una serie de no-ops.
  3. Extensibilidad : el usuario puede ampliar un marco de trabajo generalmente mediante una anulación selectiva o especializado por código de usuario que proporciona una funcionalidad específica.
  4. código marco no modificable: el código marco, en general, no se permite modificar. Los usuarios pueden extender el marco, pero no modificar su código.

Es posible que lo "necesite" porque puede proporcionarle un excelente acceso directo al desarrollar aplicaciones, ya que contiene muchas funciones ya escritas y probadas. La razón es bastante similar a la razón por la que usamos bibliotecas de software.

aioobe
fuente
13
la parte blanca de su respuesta fue mucho mejor que la parte gris, según el tipo de pregunta ...
OlimilOops 03 de
Estoy bastante seguro de que la persona que hizo la pregunta también encontró la entrada de Wikipedia ... Probablemente buscó una respuesta más completa.
Stophface
31

Muchas buenas respuestas ya, pero déjame ver si puedo darte otro punto de vista.

Simplificando bastante las cosas, puede ver un marco como una aplicación que está completa, excepto por la funcionalidad real. ¡Conecta la funcionalidad y PRESTO! Tienes una aplicación.

Considere, digamos, un marco GUI. El marco contiene todo lo que necesita para hacer una aplicación. De hecho, a menudo puede hacer una aplicación mínima de manera trivial con muy pocas líneas de origen que no hace absolutamente nada, pero le brinda administración de ventanas, administración de subventanas, menús, barras de botones, etc. Ese es el lado del marco de las cosas. Al agregar la funcionalidad de su aplicación y "enchufarla" en los lugares correctos del marco, convierte esta aplicación vacía que no hace más que administrar ventanas, etc., en una aplicación real y completa.

Existen tipos similares de marcos para aplicaciones web, para aplicaciones del lado del servidor, etc. En cada caso, el marco proporciona la mayor parte del código tedioso y repetitivo (con suerte) mientras proporciona la funcionalidad del dominio del problema real. (Este es el ideal. En realidad, por supuesto, el éxito del marco es muy variable).

Insisto nuevamente en que esta es la visión simplificada de lo que es un marco. No estoy usando términos aterradores como "Inversión de control" y similares, aunque la mayoría de los frameworks tienen esos conceptos aterradores incorporados. Como eres un principiante, pensé en ahorrarte la jerga e ir con un símil fácil.

SOLO MI OPINIÓN correcta
fuente
14

No estoy seguro de que haya una definición clara de "marco". A veces, un gran conjunto de bibliotecas se llama marco, pero creo que el uso típico de la palabra está más cerca de la definición que se trae.

Este muy buen artículo resume la diferencia entre solo un conjunto de bibliotecas y un marco:

Un marco se puede definir como un conjunto de bibliotecas que dicen "No nos llames, nosotros te llamaremos".

¿Cómo te ayuda un marco? Porque en lugar de escribir algo desde cero, básicamente solo extiendes una aplicación que funciona. Obtiene mucha productividad de esta manera, a veces la aplicación resultante puede ser mucho más elaborada de lo que podría haber hecho por su cuenta en el mismo período de tiempo, pero generalmente intercambia mucha flexibilidad.

Roble
fuente
8

Una explicación simple es: un marco es un andamio sobre el que puede construir aplicaciones.

Un marco generalmente proporciona alguna funcionalidad básica que puede usar y ampliar para crear aplicaciones más complejas, existen marcos para todo tipo de cosas. Microsofts MVC framework es un buen ejemplo de esto. Proporciona todo lo que necesita para despegar del sitio web de construcción usando el patrón MVC, maneja solicitudes web, rutas y similares. Todo lo que tiene que hacer es implementar "Controladores" y proporcionar "Vistas", que son dos construcciones definidas por el marco MVC. El marco MVC se encarga de llamar a sus controladores y representar sus vistas.

Quizás no sea la mejor redacción pero espero que ayude

Sekhat
fuente
1
En realidad, es más como construir aplicaciones en el andamio que a su alrededor .
Jörg W Mittag
4

en el nivel más bajo, un marco es un entorno en el que se le proporcionan un conjunto de herramientas para trabajar

Estas herramientas vienen en forma de bibliotecas, archivos de configuración, etc.

Este llamado "entorno" le proporciona la configuración básica (informes de errores, archivos de registro, configuración de idioma, etc.) ... que puede modificarse, ampliarse y desarrollarse.

La gente en realidad no necesita marcos, es solo una cuestión de querer ahorrar tiempo, y otros solo son una cuestión de preferencias personales.

La gente justificará que con un marco, no tiene que codificar desde cero. Pero esas son solo personas que confunden las bibliotecas con los marcos.

No estoy siendo parcial aquí, en realidad estoy usando un marco en este momento.

yretuta
fuente
4

En general, un marco de trabajo es una estructura real o conceptual destinada a servir como soporte o guía para la construcción de algo que expande la estructura en algo útil ...

uma
fuente
2

Un marco proporciona funcionalidades / solución al área del problema particular.
Definición de wiki :

Un marco de software, en la programación de computadoras, es una abstracción en la cual el código común que proporciona funcionalidad genérica puede ser anulado o especializado selectivamente por el código de usuario que proporciona funcionalidad específica. Los marcos son un caso especial de las bibliotecas de software, ya que son abstracciones reutilizables de código envuelto en una interfaz de programación de aplicaciones (API) bien definida, pero contienen algunas características distintivas clave que las separan de las bibliotecas normales.

Soe Moe
fuente
Hay una palabra en la primera oración "abstracción". Qué quieres decir con eso ? ¿Dónde usamos la abstracción?
Kumaresan Perumal
2

Un marco nos ayuda a usar el "ya creado", una metáfora puede ser como,

piensa que el material de la tierra es el lenguaje de programación,

y, por ejemplo, "una cámara" es el programa, y ​​usted decidió crear un cuaderno. No necesita recrear la cámara cada vez, solo use el marco de tierra (por ejemplo, en una tienda de tecnología), tome la cámara e integrela en su computadora portátil.

stckvrflw
fuente
2

Un marco tiene algunas funciones que puede necesitar. quizás necesite algún tipo de arreglos que tengan mecanismos de clasificación incorporados. O tal vez necesite una ventana donde desee colocar algunos controles, todo lo que puede encontrar en un marco. Es un tipo de TRABAJO que abarca un MARCO alrededor de su propio trabajo.

EDITAR: OK, estoy a punto de desenterrar lo que ustedes intentaban decirme;) tal vez no hayan notado la información entre las líneas "TRABAJO que abarca un MARCO ..." antes de que esto se caiga más y más. Intento darle una palabra con la esperanza de que sea amable:
una buena explicación a la pregunta "Diferencia entre una biblioteca y un marco" que encontré aquí
http://ifacethoughts.net/2007/06/04/difference-between- a-library-and-a-framework /

OlimilOops
fuente
totalmente no entiendo los votos negativos ... Estoy completamente atónito al respecto. la pregunta es el tipo de pregunta básica para principiantes y mi respuesta fue de acuerdo a eso bastante bueno ...
OlimilOops 03 de
44
Para ser claros: no rechacé el voto. Sin embargo, de lo que está hablando está en un nivel mucho más bajo de lo que le preocupa a un marco. Las colecciones y los algoritmos de clasificación son más bibliotecas estándar que Frameworks, por ejemplo.
bakkal
1
gracias por la respuesta pero ... no es la respuesta a mi pregunta. Según la pregunta de OP, la distinción entre "biblioteca estándar" y "marco" es el lugar equivocado aquí. por ejemplo, en .net-framework puede encontrar las colecciones de espacios de nombres en una parte del marco. Nunca he escuchado a nadie decir que la colección de espacios de nombres no es parte de .netframework. así que su respuesta a mi pregunta es incorrecta
OlimilOops
1
Esta es la definición de una biblioteca . Se pierde el rasgo distintivo de un marco en lugar de una biblioteca: Inversión de control .
Jörg W Mittag
2

Más allá de las definiciones, que a veces son entendibles solo si ya comprende, un ejemplo me ayudó.

Creo que obtuve un atisbo de comprensión cuando busqué ordenar una lista en .Net; Un ejemplo de un marco que proporciona una funcionalidad que se adapta al código de usuario que proporciona una funcionalidad específica. Take List.Sort (IComparer). El algoritmo de ordenación, que reside en el marco .Net en el método Ordenar, necesita hacer una serie de comparaciones; ¿El objeto A viene antes o después del objeto B? Pero Sort no tiene idea de cómo hacer la comparación; solo el tipo que se está ordenando lo sabe. No podría escribir un algoritmo de clasificación de comparación que pueda ser reutilizado por muchos usuarios y anticipar todos los diversos tipos que se le pediría que clasifique. Tienes que dejar ese trabajo al usuario mismo. Así que aquí, sort, también conocido como framework, vuelve a llamar a un método en el código de usuario, el tipo se ordena para que pueda hacer la comparación. (O se puede usar un delegado;

¿Lo entendí bien?

BillB
fuente