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
}
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 propiedadfiles
que sea una matriz de objetosFileAttachment
.A continuación, crear tres clases hijas que hereden de
BaseEntity
:Book
,Author
yStore
. Cada clase hija puede tener sus propias propiedades y métodos únicos.Finalmente, definir la clase
FileAttachment
de modo que contenga una propiedad llamadausedBy
que pueda hacer referencia a cualquiera de las clases hijas.Ahora, para adjuntar un archivo a un objeto
Book
, simplemente se crearía un objetoFileAttachment
y se pasaría el objetoBook
como argumento.De manera similar, para adjuntar un archivo a un objeto
Author
oStore
, 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 claseFileAttachment
no necesita tener propiedades separadas para cada clase hija, ya que simplemente hace referencia a la propiedad genéricausedBy
.