Sto creando un'interfaccia per registrare la cronologia di navigazione.
Per prima cosa, abbiamo tre tipi di record: Registrabile (il comportamento predefinito), Revisibile (un utente può guardare la loro cronologia e rivisitare quell'elemento), e Traversibile (l'utente può semplicemente "tornare indietro"). I record traversibili sono, per definizione, Revisibili che sono, a loro volta, registrabili. Questi tipi sono codificati in un enum.
Ogni record contiene le informazioni necessarie per ripristinare la vista in uno stato particolare. Il nostro design è modulare e basato su azioni: alcune azioni prendono dei parametri. Quindi, la cronologia deve registrare il modulo e l'azione al minimo - e talvolta i parametri di azione, e talvolta il recordType (se non il default), e talvolta entrambi.
Questo mi porta a:
void recordAction(const QString &moduleName, const QString &actionName);
void recordAction(const QString &moduleName, const QString &actionName, QVariantMap parameters);
void recordAction(const QString &moduleName, const QString &actionName, QVariantMap parameters, int recordType);
void recordAction(const QString &moduleName, const QString &actionName, int recordType);
Questo è un buon modello? O dovrei implementare qualcosa di più:
void recordAction(const QString &moduleName, const QString &actionName, QVariantMap parameters = QVariantMap());
void recordRevisitableAction(const QString &moduleName, const QString &actionName, QVariantMap parameters = QVariantMap());
void recordTraversibleAction(const QString &moduleName, const QString &actionName, QVariantMap parameters = QVariantMap());
Suppongo che, in definitiva, questi metodi chiameranno semplicemente un interno:
void recordAction(const QString &moduleName, const QString &actionName, QVariantMap parameters, int recordType);
Quindi, qual è il modello migliore da seguire? Anche se non vedo ancora un'esigenza, potrebbe esserci un altro tipo di record a cui non ho pensato ...