¿Qué es un marco de software?

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

Llego muy tarde para responderlo. Pero, me gustaría compartir un ejemplo, en el que solo pensé hoy. Si te dijera que cortes una hoja de papel con unas dimensiones de 5m por 5m, seguramente harías eso. Pero supongamos que le pido que corte 1000 pedazos 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 podrías cortar 1000 pedazos de papel en menos tiempo. Entonces, lo que hiciste fue crear un marco que hiciera 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 tiene todas esas instalaciones juntas en un paquete agradable, por lo tanto, proporciona la abstracción para su aplicación y, lo que es más importante, muchas aplicaciones.

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

Y si quieres hacer una aplicación web moderna, tampoco necesitas utilizar un framework para eso.

En su lugar, puede optar por escribir toda la lógica que necesita usted mismo, todo el tiempo. Puede escribir su propia capa de persistencia / almacenamiento de datos o, si está demasiado ocupado, simplemente escriba SQL personalizado para cada acceso a la base de datos. Puede escribir sus propias capas de autenticación y manejo de sesiones. Y tu propia lógica de desgarro de plantilla. 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 la tuya … [continúa por bastante tiempo]

Por otra parte, si usa un marco , podrá beneficiarse del trabajo bueno, generalmente revisado por colegas y muy bien probado de docenas, sino cientos de otros desarrolladores, que bien pueden ser mejores que usted. Podrás construir lo que quieras rápidamente, sin tener que perder tiempo construyendo o preocupándote demasiado por los elementos de infraestructura enumerados anteriormente.

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

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

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

Un marco de software, en la progtwigción de computadoras, es una abstracción en la cual un código común que proporciona una funcionalidad genérica puede ser anulado o especializado selectivamente por un código de usuario que proporciona una funcionalidad específica. Los marcos son un caso especial de las bibliotecas de software en el sentido de que son abstracciones reutilizables del código envuelto en una interfaz de progtwigción de aplicaciones (API) bien definida, aunque 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 las 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 de control del progtwig en general no es dictado por la persona que llama sino por el marco. [1]
  2. comportamiento predeterminado : un marco tiene un comportamiento predeterminado. Este comportamiento predeterminado debe ser realmente un comportamiento útil y no una serie de operaciones no operativas.
  3. extensibilidad : el usuario puede ampliar un marco de trabajo generalmente mediante una anulación selectiva o especializado mediante un código de usuario que proporciona una funcionalidad específica.
  4. código de marco no modificable: el código de marco, en general, no puede modificarse. Los usuarios pueden ampliar el marco, pero no modificar su código.

Es posible que lo “necesite” porque puede proporcionarle un buen atajo al desarrollar aplicaciones, ya que contiene muchas funcionalidades ya escritas y probadas. La razón es bastante similar a la razón por la que utilizamos las bibliotecas de software.

Ya hay muchas buenas respuestas, pero déjame ver si puedo darte otro punto de vista.

Simplificando las cosas bastante, puede ver un marco como una aplicación completa, excepto por la funcionalidad real. ¡Usted enchufa 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 trivialmente una aplicación mínima con muy pocas líneas de fuente que no hace absolutamente nada, pero le da administración de ventanas, administración de subventanas, menús, barras de botones, etc. Ese es el aspecto del marco. Al agregar la funcionalidad de su aplicación y “conectarla” a los lugares correctos en el marco, convierte esta aplicación vacía que no hace más que gestión de ventanas, etc. en una aplicación real y completa.

Existen marcos similares 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 real del dominio del problema. (Este es el ideal. En realidad, por supuesto, el éxito del marco es muy variable).

Insisto una vez más en que esta es la visión simplificada de lo que es un marco. No estoy utilizando términos de miedo como “Inversión de control” y similares, aunque la mayoría de los marcos tienen incorporados conceptos tan aterradores. Como eres un principiante, pensé que te ahorraría la jerga e iría con un símil fácil.

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

Un marco generalmente proporciona alguna funcionalidad básica que puede usar y extender para hacer aplicaciones más complejas, hay marcos para todo tipo de cosas. El marco MVC de Microsofts es un buen ejemplo de esto. Proporciona todo lo que necesita para iniciarse en la construcción de sitios web 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 de MVC luego maneja llamar a sus controladores y representar sus vistas.

Tal vez no sea la mejor redacción, pero espero que ayude

en el nivel más bajo, un marco es un entorno en el que se le proporciona un conjunto de herramientas con las que 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, configuraciones de idioma, etc.) que puede modificarse, ampliarse y desarrollarse.

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

La gente lo justificará con un marco, no es necesario que codifique desde cero. Pero esas son solo personas que confunden bibliotecas con marcos.

No estoy siendo imparcial aquí, en realidad estoy usando un marco ahora mismo.

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

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

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

Un marco nos ayuda a utilizar el “ya creado”, puede ser una metaphore,

pensar que el material de la tierra es el lenguaje de progtwigción,

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

Un marco tiene algunas funciones que puede necesitar. tal vez necesites algún tipo de arreglos que tengan mecanismos de clasificación incorporados. O tal vez necesita una ventana donde desea 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 excavar lo que ustedes estaban tratando de decirme;) tal vez no hayan notado la información entre las líneas “TRABAJO que abarca un MARCO alrededor de …” antes de que esto se caiga más profundo n más profundo. Trato de darle un piso esperando que estés graciosamente:
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/

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

Creo que tengo un atisbo de comprensión cuando busco ordenar una lista en .Net; un ejemplo de un marco que proporciona una funcionalidad adaptada por el código de usuario que proporciona una funcionalidad específica. Take List.Sort (IComparer). El algoritmo de ordenamiento, que reside en el marco .Net en el método Sort, 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 comparación de clasificación que pueda ser reutilizado por muchos usuarios y anticipar todos los diversos tipos que se le pedirían que ordenara. Tienes que dejar ese poco de trabajo al usuario mismo. Así que aquí, ordenar, también conocido como el marco, vuelve a llamar a un método en el código de usuario, el tipo que se ordena para que pueda hacer la comparación. (O un delegado puede ser utilizado; el mismo punto).

¿Lo entendí bien?