Spesso incontro il seguente programma durante la programmazione. Esiste una soluzione "parziale" a un problema, che fornisce tutte le funzionalità necessarie, ma la documentazione che spiega tale funzionalità e il comportamento della soluzione è molto densa ed esoterica. Quindi, esiste una soluzione "completa", che fornisce più funzionalità del necessario, ma la documentazione non deve spiegare perché non funziona in alcuni casi, e quindi è molto semplice e facile da capire.
Proprio come un esempio immediato, considera un metodo Foo(A a)
che prende un singolo argomento di tipo A
. Diciamo solo che c'è un'implementazione facile di Foo
, ma richiede A
per avere determinate proprietà, e la spiegazione del motivo per cui tali proprietà sono necessarie è lunga e complessa.
La soluzione "parziale" è all'inizio di Foo
Semplicemente controllo se A
ha le proprietà richieste e poi lo rifiuta se non lo fa. Ciò, tuttavia, rende la documentazione molto complessa poiché ora devo spiegare perché non funziona per determinati oggetti.
D'altra parte ho la soluzione "completa", che è semplicemente rendere Foo
lavoro per tutti A
s, indipendentemente dalle loro proprietà. Supponiamo che potrebbe teoricamente implementare un Foo
che lo comporti, ma richiede molto più codice rispetto all'implementazione "parziale".
Quale è meglio?
Forse è un cattivo esempio, ma mi imbatto spesso in generalizzazioni di questo problema in molti dei miei progetti più grandi. Quale soluzione dovrei scegliere di fronte a questo dilemma (se uno dei due "parziale" o "pieno")? Esistono suggerimenti generali per evitare che questa situazione si verifichi?