Attualmente sto lavorando a un progetto che genera video da modelli (un modello è una raccolta di file e risorse JSON).
Sembra naturale avere una classe Template
che contenga tutte le informazioni su come questo modello specifico è strutturato (ad esempio quali parti sono personalizzabili, quali risorse sono richieste ecc ...).
Il problema su cui sono stato appeso è come modellare un lavoro. Un lavoro richiede un determinato Template
, consente l'assegnazione di valori ai campi personalizzabili e il rendering di un video utilizzando questi valori. Per me, ha senso che un Job sia un'istanza di un'istanza di Template
.
Una soluzione che sto immaginando è qualcosa del genere (in pseudo-Typescript):
class Template {
// elements in groups can be subclasses of the generic TemplateField - I'd like to preserve that and their grouping in the DynamicallyCreatedTemplateClass that is generated below
templateFields : Group<TemplateField>[];
constructor( sourcePath : string) {
// build shape of templateFields from a file
}
// This should return a constructor for a dynamically created class that inherits from Template as well as a Job mixin but already has a concrete structure in this.templateFields
// in general, the resulting class should resemble the Template instance this is called on (i.e. properties that have values on the instance should have the same values in every instance of the generated class)
getInstanceClass() : () => DynamicallyCreatedTemplateClass { /* ??? */ }
}
const someTemplate = new Template('/path/to/some/file.json');
const someJob = new someTemplate.getInstanceClass();
someJob.templateFields[0].get(0).value = 'something';
if(
someJob.templateFields[0].get(0).type == someTemplate.templateFields[0].get(0).type &&
typeof someTemplate.templateFields[0].get(0).value === 'undefined'
)
console.log('success!');
Esiste uno schema per descrivere questa relazione o sto sbagliando tutto questo?