Sto scrivendo una libreria C (c99) che opera su stringhe. Sto riscontrando un problema di progettazione durante la scrittura di funzioni che verranno eseguite in diverse modalità.
Ad esempio; la funzione Trova può cercare:
- il primo, ultimo, n-esimo elemento
- caso di lettere diverse
- restituisce la posizione prima o dopo l'elemento trovato
- cerca in una sottostringa
Queste modalità causano la denominazione della funzione esponenziale. La mia soluzione è una funzione per ogni combinazione di modalità:
Find(), FindCase(), FindSubstring(), FindSubstringCase(), FindSubstringCaseEnd(), FindEnd(), ...
e così via fino a quando non viene creata ogni combinazione. Ho scritto le funzioni di ricerca in un modo in cui ogni modalità è solo un wrapper di una funzione di ricerca generica chiamata internamente per evitare la duplicazione. Ciò ha reso facile aggiungere nuove modalità di funzionamento, l'unico svantaggio è il conteggio delle funzioni insolito.
Non penso che verranno aggiunte altre modalità, quindi il conteggio della funzione corrente è a due cifre. Ancora non sono sicuro che sia la soluzione migliore.
Le soluzioni alternative che ho considerato e che non ho trovato degne sono:
Avere una funzione generica con molti parametri. Questo è inferiore perché è più facile ricordare il nome della funzione rispetto ai suoi parametri. È anche soggetto a errori e pone un carico inutile all'utente.
Avere una funzione che accetta una serie di modalità (come fopen ()). Stessi problemi di cui sopra.
Le funzioni degli argomenti variabili non meritano di essere considerate.
Penso che la mia soluzione sia decente, dal momento che l'utente deve solo ricordare il nome, la denominazione è coerente, quindi puoi "indovinare" il nome e non puoi davvero commettere un errore. Nel peggiore dei casi è necessario cercare il nome e il nome potrebbe contenere fino a ~ 20 caratteri, che richiede comunque meno spazio rispetto ai parametri aggiuntivi.
Nota inoltre che questo problema si applica ad altre funzioni (inserisci, cancella, ...) in misura minore.
Tuttavia, sto cercando soluzioni migliori se ce ne sono.