No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Bases de Datos en Symfony

Curso de Bases de Datos en Symfony

Profesor Italo Morales F

Profesor Italo Morales F

Fábrica de datos

7/21
Recursos

¿Cómo crear datos realistas en proyectos de desarrollo?

La creación de datos cercanos al mundo real es esencial para construir y probar aplicaciones de software de manera efectiva. Esto ayuda a que nuestras simulaciones y pruebas reflejen mejor el comportamiento del sistema que implementaremos en producción. A continuación, exploraremos los pasos a seguir para lograr que tus datos de prueba sean lo más realistas posible.

¿Cómo configurar el entorno para la creación de datos?

Primero, verificamos que los datos creados anteriormente, como productos con metadatos, comentarios y etiquetas, funcionan correctamente en nuestro sistema, aunque no reflejan exactamente un entorno real. Para rectificar esto, comenzamos instalando el componente de creación de factories usando el comando composer. Aquí está el proceso:

  1. Abre tu terminal.
  2. Ejecuta composer require el-nombre-del-proveedor/el-nombre-del-componente --dev.
  3. Después de instalar correctamente el componente, podrás usar comandos como make:factory.

¿Cómo manejamos las fábricas de datos para diferentes entidades?

El objetivo es crear fábricas para diversas entidades (productos, comentarios, metadatos, etiquetas) a través del uso de un comando específico y luego configurarlas para que generen datos realistas:

// Ejemplo de cómo crear 20 productos con metadatos asociados
ProductFactory::createMany(20, function() {
    return ['metadatos' => MetadatoFactory::new()];
});

Al definir nuestros productos con metadatos, necesitaremos verificar que todos los detalles estén correctamente configurados. Si un producto requiere metadatos, debemos asegurar que se asocia correctamente al crear una nueva instancia de Metadato cada vez.

¿Cómo garantizamos la variedad y aleatoriedad en los datos?

Para emular datos realistas, es crucial agregar diversidad y aleatoriedad en los registros. Para esto, configuramos cada factory para que genere atributos como nombres, resúmenes de productos, etiquetas y restos de manera variada:

  • Nombre del producto: Una oración directa y concisa.
  • Etiquetas: Palabras individuales, sin párrafos extensos.
  • Metadatos: Números aleatorios dentro de un rango específico, como entre 100 y 200.
  • Comentarios: Texto generador de contenido con un rango de cero a cinco comentarios por producto.

Al incluir variabilidad, nuestros datos reflejan el comportamiento esperado en una aplicación en producción, probando de manera eficaz la robustez del sistema.

¿Cómo se establecen las relaciones entre diferentes entidades?

Para relacionar efectivamente los datos, realice configuraciones que logren asociaciones relevantes entre las entidades. Por ejemplo, un producto puede tener múltiples comentarios o estar asociado con varias etiquetas ya existentes, así:

// Crear comentarios para cada producto de forma aleatoria
Product::create(['cometarios' => ComentarioFactory::new()->many(0, 5)]);

// Asociar etiquetas ya existentes de manera aleatoria
Product::randomSet(2); // Agrega dos etiquetas de la base de datos de forma aleatoria

¿Cuáles son las mejores prácticas para implantar datos semilla?

Por último, al integrar todo el sistema, asegúrate de que los datos se parecen a entradas significativas y variadas, evitando líneas de texto como "producto 1" o "etiqueta 1". Este enfoque ayuda a construir un entorno de prueba sólido y consistente:

  • Cada producto debe tener nombre y resumen adecuados.
  • Las etiquetas y los comentarios deben ser diversificados y aleatorios.
  • Verificar que las relaciones entre las entidades establecidas reflejan adecuadamente las de un mundo real.

Es importante seguir estas prácticas para asegurar que los datos se asemejen a lo que realmente se encontraría en un entorno de producción. Practicar estos métodos te permitirá establecer un marco robusto y seguro sobre el que se pueden construir aplicaciones efectivas y útiles.

Aportes 2

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Desde la versión v1.25.0 de zenstruck/foundry ya no es necesario agregar el el campo metadata en el factory del producto.
Se ha agredado una nueva funcionalidad que resuelve las relaciones ManyToOne y OneToOne automáticamente.
Así que si no da error al ejecutar el comando sin la modificación que se hace en esta clase, probablemente es por eso 😃

Al usar

MetadaFactory::new()

Me daba error por lo cual busqué en la documentación y ahora se usa:

protected function getDefaults(): array
    {
        return [
            'name' => self::faker()->sentence(),
            'summary' => self::faker()->text(),
            'metadata' => MetadataFactory::createOne()
        ];
    }

También tuve problemas al crear el producto y me quedó así:

    public function load(ObjectManager $manager): void
    {
        TagFactory::createMany(5);

        ProductFactory::new()
            ->many(20)
            ->create(function () {
                return [
                    'comments' => CommentFactory::new()->many(0, 5),
                    //'tags' => TagFactory::randomRange(2, 5)
                    'tags'=>TagFactory::randomSet(2)
                ];
            });
    }