Modelli, tipi, viste e metadati diversi

2

Abbiamo un software con lo scopo di aiutare gli utenti a creare le proprie applicazioni. Deve essere molto allentato con l'infrastruttura: ad esempio, posso immaginare che gli utenti lo eseguano sul database MySQL anche su MongoDB.

Abbiamo moduli di funzionalità. In ogni modulo abbiamo quello che chiamo pure modelli - contenente solo ciò che è richiesto. Ad esempio, un Book contiene autori, titolo, numero di pagine e così via.

Il problema è che abbiamo bisogno di raggruppare metadati aggiuntivi con i modelli che dipendono dall'altra infrastruttura! L'esempio banale è un codice tecnico di Book : per i repository MySql questa è la chiave primaria della tabella, anche altri id; per repository MondoDB è solo la sua chiave di stringa. Come vedi, le informazioni sui metadati non sono uniche e dipendono dall'infrastruttura.

Questi dati aggiuntivi sono forniti dall'implementazione concreta del repository, ogni volta che il modello viene memorizzato o recuperato dal repository.

Ora il problema: vorremmo "nascondere" questo dall'interfaccia Book (cioè modello) - poiché non ha senso raggruppare tutte le varianti dei metadati in Book .

Come risolvere questo?

[A] Possiamo avere fabbriche che costruiscono i nostri modelli, a seconda del repository usato. Quindi per il repository SQL, abbiamo un factory SQL, che costruisce una variante SQL del modello. Non sono sicuro che mi piaccia.

[B] Semplicemente aggiungiamo una proprietà a Book per ulteriori metadati, come repoMetaData . Questa proprietà è strettamente tecnica, cioè non è legata al business. Quindi qualsiasi implementazione di repository può iniettare qualsiasi cosa all'interno. Book diventerebbe RepositoryAware (un'interfaccia).

Mi piace di più il [B], ma a qualcuno non piace il fatto che stiamo aggiungendo elementi tecnici all'interfaccia del libro. In che misura ha senso aggiungere ulteriori informazioni tecniche ai modelli?

    
posta igor 14.11.2014 - 07:44
fonte

2 risposte

1

Se raggruppi i metadati tecnici (come tu lo chiami) in classi ragionevoli, non vedo alcun problema a far parte del tuo Book .

C'è solo un problema se alcuni dei tuoi metadati sono necessari durante la creazione del modello. Se questo è un caso, non è possibile eseguire da fabbriche o disporre di istanze per i provider di tali metadati.

    
risposta data 14.11.2014 - 07:48
fonte
0

La risposta che ho visto più spesso è aggiungere:

public object MetaData

Alla classe. Ovviamente questo offre molta flessibilità, ma nessun tipo di sicurezza.

Un'altra opzione sarebbe quella di aggiungere un ID GUID a tutte le classi di stile 'entità'. Ciò consentirebbe alle classi che consumano di implementare il proprio archivio di metadati cancellati dall'ID

    
risposta data 13.05.2015 - 12:27
fonte

Leggi altre domande sui tag