Il nostro dominio della conoscenza coinvolge persone che camminano su una piastra di registrazione della pressione con i piedi nudi. Facciamo il riconoscimento dell'immagine che risulta in oggetti della classe 'Piede', se un piede umano è riconosciuto nei dati del sensore.
Ci sono diversi calcoli che devono essere eseguiti sui dati del piede.
Ora, quale API sarebbe meglio:
class Foot : public RecognizedObject {
MaxPressureFrame getMaxPressureFrame();
FootAxis getFootAxis();
AnatomicalZones getAnatomicalZones();
// + similar getters for other calculations
// ...
}
o
class Foot : public RecognizedObject {
virtual CalculationBase getCalculation(QString aName);
// ...
}
Ora, ci sono molti pro e contro che posso inventare, ma non posso davvero decidere quali sono i più importanti. Nota, questa è un'applicazione per l'utente finale, non una libreria di software che vendiamo.
Qualche consiglio?
Alcuni professionisti del primo approccio potrebbero essere:
- KISS - tutto è molto concreto. L'API, ma anche l'implementazione.
- valori di ritorno strongmente digitati.
- ereditare da questa classe è infallibile. Nulla può essere ignorato, aggiunto solo.
- L'API è molto chiusa, niente entra, nulla può essere ignorato, quindi meno può andare male.
Alcuni contrari:
- Il numero di getter crescerà, poiché ogni nuovo calcolo che inventiamo viene aggiunto all'elenco
- È più probabile che l'API cambi, e se vengono introdotte modifiche di rottura, abbiamo bisogno di una nuova versione dell'API, una Foot2.
- in caso di riutilizzo della classe in altri progetti, potremmo non aver bisogno di ogni calcolo
Alcuni professionisti per il secondo approccio:
- più flessibile
- è meno probabile che l'api cambi, (presumendo che l'astrazione sia corretta, in caso contrario, la modifica avrà un costo maggiore)
Alcuni contrari:
- digitato in modo approssimativo. Ha bisogno di cast per ogni chiamata.
- il parametro stringa - Ho delle sensazioni negative (ramificazione dei valori stringa ...)
- Non esiste un caso / requisito di utilizzo corrente che richieda una flessibilità extra, ma potrebbe esserci in futuro.
- l'API impone restrizioni: ogni calcolo deve derivare da una classe base. Ottenere un calcolo sarà forzato attraverso questo metodo 1, e passare parametri extra sarà impossibile, a meno che non escogitiamo un modo ancora più dinamico e super-flessibile di passare parametri che aumenti ancora di più la complessità.