Come modellare tipi simili con dati diversi?

2

Stiamo lavorando su un sistema di bugtracking.

Il nostro design ha una classe BugReport che rappresenta l'archiviazione di un bug di alcuni progetti nel sistema. BugReports ha tag, che rappresentano lo stato / l'avanzamento del BugReport. I possibili tag sono ad es. Nuovo, Chiuso, Duplicato, In revisione, ...

I tag non hanno alcuna responsabilità oltre a rappresentare l'avanzamento del BugReport. Tranne per un tipo speciale di tag, Duplica. Duplicato significa che BugReport è in realtà un duplicato di un altro BugReport nel sistema. Quando un utente etichetta un BugReport come duplicato, deve indicare di quale BugReport il BugReport è un duplicato di.

Ho problemi a progettare questa parte. Come detto prima, la maggior parte dei tag ha solo la funzionalità di rappresentare l'avanzamento del BugReport. Tranne uno (forse più in futuro) che ha anche la funzionalità per indicare un altro BugReport.

Un enum semplice sarebbe stato sufficiente se non fosse stato per la parte duplicata, ma non ho idea di come fornire la funzionalità extra di Duplicato?

    
posta Auberon 17.03.2016 - 22:54
fonte

1 risposta

2

Le informazioni Nuovo, Chiuso, Duplicato, In revisione, e simili corrispondono agli stati di un BugReport.

Gli stati semplici sono solitamente rappresentati con un indicatore o un enum. Se si dispone di una sola eccezione, è possibile utilizzare un'associazione facoltativa a un altro BugReport, con l'osservazione che deve essere utilizzata solo nel caso di duplicati.

Tuttavia un'altra alternativa più pulita sarebbe quella di utilizzare il modello di progettazione dello stato . Questo è molto potente: gli stati sono modellati come classe, ciascuno stato che eredita da uno stato di base e incapsula se necessario i dati e i comportamenti dipendenti dallo stato. È molto potente e manutenibile.

    
risposta data 18.03.2016 - 00:05
fonte

Leggi altre domande sui tag