Come progettare database con modificabile dall'utente / contenuti versionable utilizzando codice prima?
-
28-09-2019 - |
Domanda
Ho un sviluppo di una pagina in cui gli utenti saranno in grado di aggiungere e modificare i contenuti esistenti, non è un wiki per sé, ma una sorta di, come la capacità di editing di SO.
sto lavorando con EF4 e il nuovo approccio codice Prima nell'ultima CTP, così che cosa sarebbe il miglior design di classe per questo?
La mia ipotesi attuale è qualcosa di simile:
public class VersionableText
{
public int Id { get; set; }
public DateTime Date{ get; set; }
public String Text{ get; set; }
public virtual User User{ get; set; }
}
e quindi utilizzare nei miei altre entità, in un contesto in modo che possa essere qualcosa di simile
public class Question
{
public int Id {get; set;}
public virtual VersionableText Title {get; set;}
public virtual VersionableText Content{get; set;}
...
}
Ma io non sono veramente convinto da esso .. da quando ho anche intenzione di avere i tag, la capacità di cancellare / messaggi undelete, rollback, ecc Sai come progettare correttamente le classi che la versione aiuto me il contenuto correttamente?
Soluzione
Aim per semplicità
La questione principale che è necessario porsi è Avete intenzione di mostrare tutte le versioni tutto il tempo o la versione più recente la maggior parte del tempo e tutti loro su richiesta? Simile a qui. Il più delle volte si vede solo la versione più recente.
Se questo è lo stesso con il nostro caso vorrei si preoccupa tanto di queste versioni. Ma quando ci si vuole mostrare loro tutto su un design di classe pagina più o meno dipende dal modo in cui si desidera mostrare. E 'intenzione di essere delle variazioni e cose del genere.
Preferisco avere una classe come:
public class Question
{
public int Id { get; set; }
public QuestionStatus Status { get; set; }
}
public class QuestionHistory
{
public Question Question { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public User Author { get; set; }
public DateTime Created { get; set; }
public IList<Tag> Tags { get; set; }
}
E quando mi piacerebbe visualizzare tutti li avevo appena restituire un elenco di questi ordinato da LastChange
. Ho aggiunto elenco tag, ma non ho aggiunto una qualsiasi delle altre proprietà relativi al processo relativi allo stato domanda. Dipende enormemente sulla sequenza di processo.