Come trovi la tua strada in un codice interconnesso e profondamente annidato? [duplicare]

8

So che molte persone odiano le funzioni piatte e lunghe e odiano quando il codice non è pieno di ISomethings.

Il problema è che immagino che la mia mente funzioni in modo diverso, e ho sempre problemi con quel tipo di codice in qualsiasi soluzione non banale.

Quindi, dal momento che la maggior parte delle persone gode di un numero esplosivo di funzioni, puoi descrivere qual è il metodo preferito quando si gestiscono basi di codice sconosciute scritte in questo modo?

Finora, per me, sembra:

Ho un oggetto con interfaccia IFoo, ottimo, ho bisogno di estenderlo con il metodo Bar1. Ricerca inversa, non arriviamo da nessuna parte, ricerca globale su chi implementa IFoo, è Baz1, Baz2, Baz3, Baz4, e sono creati da 3 fabbriche di classe. Quindi iniziamo uno per uno, la definizione di Baz1, sembra carina, ma il suo comportamento dipende completamente dai parametri usati quando l'oggetto è stato creato attraverso la classe factory. E quel che è peggio, è solo un involucro attorno ad altre funzionalità di un'altra classe con IFooBar. Che utilizza ancora alcune implementazioni interne di classi con ISomethingElse, che si trasforma nuovamente in un grafico esplosivo.

Come fai a navigare in modo efficace?

    
posta Coder 31.08.2011 - 17:44
fonte

3 risposte

3

Sembra che si stia accoppiando in modo inappropriato.

Ci sono alcuni strumenti là fuori che rendono questo un po 'più facile. In C # uso CodeRush, che include una comoda utility di navigazione per "passare agli implementatori" per una definizione di interfaccia e simili.

    
risposta data 31.08.2011 - 18:09
fonte
3

Non . Questo è il punto nello scrivere il codice in questo modo.

Non è necessario conoscere alcuna di queste implementazioni. Devi solo sapere cosa stai aggiungendo.

Ora dici che devi aggiungere un metodo a IFoo. Perchè tu? È una funzionalità che è necessario chiamare in ogni classe che implementa IFoo?

IFoo foo = FooFactory.Create(info);
foo.Action1();

if (foo.Check == "Yay")
{
    foo.Action2();
}

foo.Action4(); // Maybe I'm adding this line

while (foo.StillActive)
{
    foo.Action3();
}

Se è così allora devi sapere che cosa farà per ciascuno di questi casi, quindi probabilmente dovrai capire la classe di fabbrica per sapere quali sono questi casi.

Ma se così non fosse, probabilmente non dovresti aggiungere il tuo metodo a IFoo. Se verrà utilizzato solo in una di queste classi, crea un'altra interfaccia e procedi come segue:

IBlah fooBlah = foo as IBlah;
if (fooBlah != null) fooBlah.DoSomething();
    
risposta data 31.08.2011 - 18:14
fonte
0

Dipende dal tuo IDE. Con Visual Studio e ReSharper, trovare le implementazioni e gli usi di un'interfaccia è estremamente semplice. Suppongo di essere il contrario di te, però trovo che le funzioni più piccole siano più facili da comprendere rispetto a quelle più grandi.

    
risposta data 31.08.2011 - 18:13
fonte

Leggi altre domande sui tag