Stavo rivedendo alcuni thread su Stack Overflow e ho iniziato a chiedermi come avrei progettato le mie classi e relazioni per creare un sistema del genere.
Il mio obiettivo -
Voglio creare un sistema di revisione come il sistema di revisione Stack Exchange.
Diamo un'occhiata a come funziona il sistema review su Stack Exchange. Mi riferirò solo alla funzionalità Modifiche suggerite per mantenerla semplice.
- Utente non esperto (meno di 2000 rappresentanti) modifica il post di qualcuno
- Aggiungi una voce al sistema "recensione" taggato "suggerito-modifica"
- L'utente esperto (più di 2000 rappresentanti) può rivedere "le modifiche suggerite" una per una
Come utente esperto posso:
- Vedi la differenza tra il contenuto originale e il contenuto modificato
- Approva la modifica
- Rifiuta la modifica
- Migliora la modifica
- Passa alla prossima recensione
Nota finale su altri tipi di recensioni. Potremmo immaginare di "etichettare" le recensioni con i tipi corrispondenti poiché le azioni sono le stesse.
design
Vorrei iniziare con un modello Review
. Potremmo avere una sottoclasse per ogni tipo di recensione, che consente attributi e metodi personalizzati per ogni tipo in futuro.
ruby
class Review
class Review::SuggestedEdit < Review
class Review::FirstPost < Review
class Review::LateAnswer < Review
class Review::LowQuality < Review
Un oggetto Review
avrebbe 2 riferimenti:
- Contenuto originale
- Contenuto modificato
- Sostituisci il contenuto originale per contenuto modificato.
- Contrassegna la recensione come approvata.
- Passa alla recensione successiva.
- registra il motivo del rifiuto.
- Contrassegna la recensione come rifiutata.
- Passa alla recensione successiva.
- Modifica direttamente il contenuto modificato.
- Approva.
- (Potremmo creare immagini creando una nuova recensione per questo miglioramento.)
- Passa alla recensione successiva.
- Passa alla recensione successiva.
Come dovrei strutturare le mie classi per costruire un sistema di revisione di questo tipo?