2012-02-20 17 views
6

Sto provando a modellare alcuni dei nostri oggetti nel nostro dominio e ho riscontrato il problema che alcuni di questi oggetti potevano essere versionati. Ad esempio, l'utente può creare nuove versioni di oggetti per un periodo di tempo. Quindi, ho bisogno di modellarli nel programma. Penso che questo sia un problema comune nella progettazione di SW.Modelli di controllo delle versioni degli oggetti

Inizialmente mi sono avvicinato all'idea di imitare i concetti di controllo delle versioni del controllo sorgente e ho elaborato un concetto di oggetto versione e metodi come il check-in, il check-out ecc. Tuttavia, ho la sensazione che non sia del tutto "sistematico" come non ho esplorare i modelli (ad esempio, mi sento come commettere peccati come

  • non mi riguardano aspetti come alla ricerca di più di una soluzione
  • esaminando la letteratura che mi avrebbero dato i riferimenti più solidi, ecc) .

Quindi, il mio problema attuale è che per una modellazione sistematica, ho bisogno di cercare modelli che affronta il problema di versione di modellazione, preferibilmente in letteratura. E prenditi il ​​meglio, naturalmente.

Quindi, ho cercato su Google per tali motivi e ho trovato solo un Temporal Object pattern. Ma non ero sicuro che fosse davvero quello che volevo. Ragazzi, avete qualche suggerimento su tali modelli?

[Auto-modifica] Forse non ho descritto bene il problema. È possibile visualizzare il problema simile a un problema di controllo delle versioni dei file di controllo delle origini. Ho diversi tipi di oggetti (memorizzati nel database) che possono avere diverse versioni. All'interno della mia applicazione devo gestire tutte queste versioni e dovrò anche creare una nuova versione di oggetti (che alla fine verranno archiviati nel database). Quello che guardo avanti è una specie di modello di citazione con cui posso modellare le interfacce per accedere/modificare/aggiungere nuove versioni per questi oggetti. L'interfaccia di base che potrei trovare è IVersionedObject con metodi come checkout, checkin, undoCheckout ecc. Ma questa è la mia idea che osserva i sistemi di controllo del codice sorgente. Non penso che sia un modello di progettazione SW in quanto tale. Quindi, in attesa di alcuni modelli di progettazione molto ben documentati per il problema di cui sopra.

+2

controllo questo http://stackoverflow.com/questions/557570/what-versioning-design-pattern-would-you- consiglia di darti un'idea –

+1

Puoi controllare questo [post] (http://miroprocessordev.blogspot.com/2011/11/design-patterns-series-1-introduction.html) per vari modelli di design –

+0

thanls Amir Ismail per il link StackOverflow. Questo aveva alcuni link utili, ma non abbastanza per una soluzione :-( – PermanentGuest

risposta

1

Non funziona qualcosa di simile a un DataMapper personalizzato?

doc = DocCatalog.get(docid, version); 

Supponendo che si può considerare ogni oggetto una materializzazione di ciò che l'oggetto rappresenta, in un dato momento (nel tempo). Invece di essere un oggetto con una proprietà "versione", il "controllo delle versioni" è gestito dal datamapper/catalog/database; cioè, l'oggetto non conosce le versioni, ma lo fa il sistema di archiviazione degli oggetti.

Salvataggio/memorizzazione di un oggetto nel DataMapper genererebbe una nuova versione:

// saves doc again after changing the title (which indeed stores a new version of it) 
doc.setTitle (newTitle); 
DocCatalog.save(doc); 

// gets a number indicating how many versions of the document exist 
i_versions = DocCatalog.getVersions(docid); 

// returns second-last version of the document 
doc = DocCatalog.get(docid, i_versions-1); 
Problemi correlati