Análisis del modelo de datos

4/17

Lectura

Repaso del proyecto

Recordemos brevemente el proyecto, siempre es importante tenerlo fresco, más aún en esta etapa donde definiremos la columna vertebral de la aplicación: el modelo de datos.

Se trata de una bolsa de empleo donde empresas pueden publicar ofertas y usuarios que están en búsqueda de trabajo pueden postularse a ellas.

El modelo de datos

Como en cualquier aplicación de mediana complejidad, es importante dedicar un espacio especial a analizar cómo vamos a almacenar la información.

En nuestro caso, tratándose de un sistema transaccional, es bastante claro que un modelo relacional será lo más adecuado.

En esta clase no abordaré detalles de implementación (como qué motor de bases datos utilizaremos) y lo haré así a propósito, para concentrar la atención a definir, de la mejor manera que podamos, cuáles son las entidades que intervienen y cómo se relacionan entre sí.

Comencemos.

Las entidades

De la propia definición del problema emanan naturalmente las siguientes entidades:

  • Empresa
  • Postulante
  • Oferta

Viéndolo en forma de Diagrama de Entidad-Relación obtendremos algo como:

Diagrama de entidad

Aquí vemos que:

  1. Una empresa puede publicar muchas ofertas.
  2. Muchos postulantes pueden postularse a una oferta dada
  3. Cada oferta puede recibir múltiples postulaciones.

Seguramente a medida que avancemos nuestro modelo se volverá más complejo, por el momento es suficiente con esta primera versión.

Implementación

Si tuvieras que codear esto en php, ¿cómo lo harías?

Seguramente recurrirías a un modelo de clases, ¿cierto?

Algo como:

class Company
{
	private $name;
	private $offers = [];
}

class Offer
{
	private $name;
	private $company;
	private $applicants = [];
}

class Applicant
{
	private $name;
	private $offers = [];
}

Claro que con estas definiciones apenas comenzamos… nos faltaría, al menos, crear los constructores de las clases y algunos métodos para darles vida:

class Company
{
	private $name;
	private $offers = [];

	public function __construct(string $name)
	{
		$this->name = $name;
	}

	public function getName()
	{
		return $this->name;
	}

	public function addOffer(Offer $offer)
	{
		$this->offers[] = $offer;
	}

	public function getOffers() : array
	{
		return $this->offers;
	}
}

Bien. Se va pareciendo un poco más a algo útil, ¿o no?

Lo mismo habría que hacer con las demás clases… pero hay un par de detalles que estamos dejando un poco de lado… ¿Cómo se van a llenar estos datos?, ¿Cómo vamos a manejar la persistencia?

Y aquí es donde las cosas empiezan a ponerse cuesta arriba, ¿o no? 😃

Si tuviésemos (¡o quisiésemos!) hacer todo esto por nuestra cuenta ciertamente tendríamos un arduo trabajo por delante.

Claro que si quisiéramos encararlo de ese modo no estaríamos estudiando Symfony 😃

Una parte super importante de un framework fullstack es un componente conocido como ORM (Object Relational Mapper).

Se trata de una serie de clases que permiten interactuar con una base de datos relacional de un modo simple y orientado a objetos.

En PHP existen varios ORMs (entre ellos Eloquent, Propel o ReadBean), sin embargo, por lejos, el más utilizado junto a Symfony es Doctrine y es precisamente el que utilizaremos en este curso.

A través de Doctrine podremos:

  • Generar código en forma automática
  • Definir la relación entre nuestras entidades sin salirnos del código en ningún momento
  • Mantener nuestra base de datos sincronizada con la definición de nuestras clases

Todos estos detalles los veremos más adelante en el curso pero primero lo primero: ¡a montar un entorno de trabajo donde podamos desarrollar con comodidad!

Acompáñame a la siguiente clase donde te enseñaré a usar un entorno virtualizado para programar a gusto. 😉

Aportes 14

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Para los graficos del modelo de datos, recomiendo que usen Draw.io, es mucho mejor ademas no tiene esa marca de agua qeu estorba un poquito para leer la grafica, excelentee por est contenido

He estado mirando y si que parecen muy diferentes…
Solo he trabajado con Eloquent, vamos a ver como va Doctrine

Uhhh, a mi me gusta Eloquent, me parece muy intuitivo, vamos a mirar Doctrine, el nombre es llamativo jaja

Todo pinta de lujo, me gusta esta metodología

No sé si la segunda clase estaba mal “puesta” o en realidad el curso es así, porque ahora comienzo a comprender desde la tercera clase, me da la impresión que la clase 2 iba más adelante y el profe se equivocó… bueno seguimos en la ruta… animo a todos

Genial a usar ORM y adios a los Store procedure xd

Yo nunca he usado esté framework aver que tal me va

Continuemos 😃 👍

Que emoción estaba esperando este curso desde hace mucho tiempo

Este framework me interesa.

Excelente. pero seria mejor con videotutorial

Ganas de ver como es Doctrine, sera mejor o peor que Eloquent?

He trabajado con Eloquent, supongo que Doctrine debe ser similar.

Una forma diferente de tomar un curso, es bueno siempre conocer nuevas maneras