es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mikro-ORM – Archivos adjuntos

Estoy tratando de encontrar una solución ingeniosa para adjuntar archivos a múltiples entidades. Digamos que tengo las entidades Libro, Autor y Tienda. Cada una de ellas puede tener múltiples archivos adjuntos haciendo referencia a una entidad FileAttachment. Ahora sé que podría tener una matriz de archivos adjuntos separada en cada una de esas 3 entidades, todas haciendo referencia a una columna diferente en una entidad FileAttachment. Pero me pregunto si es posible tener una clase BaseEntity que sea el padre de Libro, Autor y Tienda que tenga una variable que, dependiendo de la clase secundaria, haga referencia a una columna diferente en la entidad FileAttachment. Algo así como esto:

class BaseEntity{
  files: FileAttachment[]
}

class Book : BaseEntity{
// Algunas propiedades más aquí
}

class FileAttachment{
  refToBook: Book
  refToAuthor: Author
  refToStore: Store
}

Sería aún mejor si FileAttachment pudiera verse así:

class FileAttachment{
  usedBy: BaseEntity
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución para adjuntar archivos a múltiples entidades sería usar herencia y polimorfismo.

    Primero, crear una clase base llamada BaseEntity que contenga una propiedad files que sea una matriz de objetos FileAttachment.

    class BaseEntity {
      files: FileAttachment[] = [];
    }
    

    A continuación, crear tres clases hijas que hereden de BaseEntity: Book, Author y Store. Cada clase hija puede tener sus propias propiedades y métodos únicos.

    class Book extends BaseEntity {
      // Propiedades y métodos específicos de Book
    }
    
    class Author extends BaseEntity {
      // Propiedades y métodos específicos de Author
    }
    
    class Store extends BaseEntity {
      // Propiedades y métodos específicos de Store
    }
    

    Finalmente, definir la clase FileAttachment de modo que contenga una propiedad llamada usedBy que pueda hacer referencia a cualquiera de las clases hijas.

    class FileAttachment {
      usedBy: BaseEntity;
    
      constructor(baseEntity: BaseEntity) {
        this.usedBy = baseEntity;
      }
    }
    

    Ahora, para adjuntar un archivo a un objeto Book, simplemente se crearía un objeto FileAttachment y se pasaría el objeto Book como argumento.

    const book = new Book();
    const file = new FileAttachment(book);
    book.files.push(file);
    

    De manera similar, para adjuntar un archivo a un objeto Author o Store, se haría lo mismo pero se pasaría la clase hija correspondiente.

    Este enfoque permite adjuntar archivos de manera dinámica a cualquier entidad que herede de BaseEntity. Además, la clase FileAttachment no necesita tener propiedades separadas para cada clase hija, ya que simplemente hace referencia a la propiedad genérica usedBy.

Comments are closed.