Categorías
Framework Concepts

¿Biblioteca frente a marco?

¿Cuál es la diferencia entre una biblioteca Java y un marco? Los dos conceptos son importantes pero a veces confusos para los desarrolladores de Java.

1. Diferencia clave y definición de biblioteca y marco

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.

Una biblioteca es solo una colección de definiciones de clases. 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 y métodos normalmente definen operaciones específicas en un área específica de 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.

En el marco, todo el flujo de control ya está allí, y hay un montón de puntos blancos predefinidos que debe completar con su código. Normalmente, un marco es más complejo. Define un esqueleto donde la aplicación define sus propias características para completar el esqueleto. De esta manera, el marco llamará a su código cuando sea apropiado. El beneficio es que los desarrolladores no necesitan preocuparse por si un diseño es bueno o no, sino solo por implementar funciones específicas del dominio.

2. Su relación

Ambos definieron API, que se utiliza para que la utilicen los programadores. Para unirlos, podemos pensar en una biblioteca como una determinada función 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 funciones definidas en bibliotecas a través de API.

3. Ejemplos

1. ¿Cómo hacer una biblioteca de Java?
2. ¿Cómo diseñar un marco?

Referencia:
Martin Fowler

Categorías
Framework Concepts

¿Cómo diseñar un marco de Java? – Un ejemplo simple

¿Es posible que sienta curiosidad por saber cómo funciona un marco? Aquí se hará un ejemplo de marco simple para demostrar la idea de marcos.

Objetivo de un marco

En primer lugar, ¿por qué necesitamos un marco que no sea solo una biblioteca normal? El objetivo del marco es definir un proceso que permita a los desarrolladores implementar ciertas funciones en función de los requisitos individuales. En otras palabras, el framework define el esqueleto y los desarrolladores completan la carne cuando lo usan.

El marco más simple

En el siguiente ejemplo, las primeras 3 clases se definen como parte del marco y la cuarta clase es el código de cliente del marco.

Main.java es el punto de entrada del marco. Esto no se puede cambiar.

//imagine this is the entry point for a framework, it can not be changed
public class Main {
	public static void main(String[] args) {
		Human h = new Human(new Walk());
		h.doMove();		
	}
}

Move.java es el Hook. Un gancho es donde los desarrolladores pueden definir / ampliar funciones según sus propios requisitos.

public abstract class Move {
	public abstract void action();
}

Human.java es la plantilla, que refleja la idea de cómo funciona el marco.

public class Human {
	private Move move;
 
	public Human(Move m){
		this.move = m;
	}
 
	public void doMove(){
		this.move.action();
	}
}

Este marco simple permite y requiere que los desarrolladores extiendan la clase «Move». En realidad, en este marco simple, el método action () es lo único que los desarrolladores pueden cambiar.

Dentro de la implementación, se pueden programar diferentes «acciones» para diferentes propósitos. Por ejemplo, el siguiente ejemplo imprime «5 millas por hora», por supuesto, puede redefinirlo como «50 millas por hora».

public class Walk extends Move {
 
	@Override
	public void action() {
		// TODO Auto-generated method stub
		System.out.println("5 miles per hour - it is slow!");
	}
}

Conclusión

El ejemplo aquí solo muestra cómo funcionan una plantilla y un gancho simples. Un marco real es más complicado que esto. No solo contiene otras relaciones como la relación plantilla-templo, sino también un proceso muy complejo sobre cómo mejorar de manera eficiente el rendimiento y la usabilidad de la programación.

Categorías
Framework Concepts spring

Tutorial de Spring MVC – Inyección de dependencia de Setter

Página de índice de tutoriales de primavera
Anterior: Hola mundo
Siguiente: Manejo de envío de formularios

En el tutorial anterior, hemos visto cómo crear una aplicación simple de Hello World Spring usando Maven en Eclipse. En la aplicación Hello World, usamos anotación. En este tutorial, mostraré cómo usar la configuración xml y la inyección de dependencia del setter. En lugar de mostrar un mensaje en la vista final, esta vez muestra una lista de empleados.

Paso 1: Crear clases de Bean y Manager

Employee.java

package com.programcreek.helloworld.model;
 
public class Employee {
	private String id;
	private String lastName;
	private String firstName;
 
	public Employee(String id, String lastName, String firstName) {
		this.id = id;
		this.lastName = lastName;
		this.firstName = firstName;
	}
 
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	public String getFirstName() {
		return firstName;
	}
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
}

EmployeeManager.java

package com.programcreek.helloworld.service;
 
import java.util.ArrayList;
import java.util.List;
import com.programcreek.helloworld.model.Employee;
 
public class EmployeeManager {
	private static List<Employee> employeeList;
 
	public EmployeeManager(){
		 employeeList = new ArrayList<Employee>();
		 employeeList.add(new Employee("1", "Mike", "Smith"));
		 employeeList.add(new Employee("2", "John", "Taylor"));
		 employeeList.add(new Employee("3", "Dave", "Wilson"));	 
	}
 
	public List<Employee> getEmployeeList(){
		return employeeList;
	}
}

Paso 2: crear controlador

EmployeeController.java

package com.programcreek.helloworld.controller;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import com.programcreek.helloworld.service.EmployeeManager;
 
public class EmployeeController implements Controller {
	private EmployeeManager employeeManager;
 
	public EmployeeManager getEmployeeManager() {
		return employeeManager;
	}
 
	public void setEmployeeManager(EmployeeManager employeeManager) {
		this.employeeManager = employeeManager;
	}
 
	public ModelAndView handleRequest(HttpServletRequest arg0,
			HttpServletResponse arg1) throws Exception {
		System.out.println("in EmployeeController");
		ModelAndView mv = new ModelAndView("employeeList");
		mv.addObject("employeeList", this.employeeManager.getEmployeeList());
		return mv;
	}
}

Paso 3: crear vista

Cree otro archivo de vista: employeeList.jsp en el directorio de vistas.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Spring 4 MVC - Employee List</title>
</head>
<body>
	<center>
 
		<c:forEach items="${employeeList}" var="employee">
			${employee.id}: ${employee.lastName}, ${employee.firstName}<br>
		</c:forEach>
 
	</center>
</body>
</html>

Hola mundo

Lista de empleados

Paso 4: configurar el archivo XML

Ahora necesitamos configurar el archivo dispatcher-servlet.xml. Después de cambiar, debería tener el siguiente aspecto:

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 
	<context:component-scan base-package="com.programcreek.helloworld.controller" />
 
	<bean id="employeeManager" class="com.programcreek.helloworld.service.EmployeeManager" />
 
	<bean name="/employee" class="com.programcreek.helloworld.controller.EmployeeController">
		<property name="employeeManager" ref="employeeManager"/>
	</bean>
 
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix">
			<value>/WEB-INF/views/</value>
		</property>
		<property name="suffix">
			<value>.jsp</value>
		</property>
	</bean>
</beans>

Resultado final

La vista final del navegador tiene el siguiente aspecto:

Ejecutando el proyecto, obtendremos las vistas.

Página de inicio
Inyección de dependencia de setter

Página de lista de empleados
setter-dependencia-inyección-archivo-xml

Enlace de descarga del código fuente.