2016-04-28 6 views
1

So arbeite ich an einer Struktur-Konvertierung-Klasse, die Dateien in unserem System von einer Situation in eine andere verschieben soll.Duplicate Code entfernen: Verschachtelung Fälle

Wie es sitzt, habe ich eine Anzahl von List<File> enthält die XML-Elemente, die durch Präfix getrennt werden müssen (weil jeder leicht abweichende Regeln hat). Die Daten für den neuen Speicherort stammen aus den Dateien selbst.

Ich gehe jetzt auf das Problem ein, dass ein Großteil meiner Logik gleich bleibt: Im Grunde schleife ich über die Liste, mache eine generische Logik, um den Ort zu bestimmen, an den es gehen muss, mache eine bestimmte Logik, dann generische Aktionen gefolgt von bestimmten Aktionen.

for(...){ 
    if(GENERIC_LOGIC){ 
     if(SPECIFIC_LOGIC){ 
      doGenericAction(); 
      doSpecificAction(); 
     } 
    } 
} 

Natürlich ist der tatsächliche Code nicht annähernd so sauber. Jedes dieser Bits ist ein Block von etwa 4 Zeilen.

Nun bezieht sich meine Frage auf das Kondensieren der generischen Logikklauseln in eine überschaubare Form. Ich habe nie vorher Umhüllungsaussagen umgestalten müssen, nur innere Aussagen. Kann mir jemand Hinweise geben, wie man das sauber und mit der geringsten Menge an Code-Grime macht? Vielen Dank!

+0

Danke für die Neu-Formatierung Berger. Ich konnte es nicht richtig machen und war schon zu spät für ein Treffen! –

Antwort

0

Wahrscheinlich die sauberste Lösung wäre die Verwendung einer abstrakten Klasse, die die generische Logik definiert und dann andere Klassen erstellt, die die spezifische Logik definieren.

Wenn Sie über die Dateien iterieren, würden Sie dann eine Instanz der entsprechenden Handler-Klasse erstellen und den Rest erledigen lassen.

+0

Das ist eine interessante Idee. Ich bin jedoch kein großer Fan von Single-Methode-Klassen. Denkanstoß! –

+0

@WeckarE .: Denken Sie daran, dass Sie auf diese Weise in der Lage wären, Änderungen an einem Verhalten vorzunehmen, ohne den Rest zu unterbrechen. Es ist wahr, Sie haben vielleicht eine Reihe von kleinen Klassen, aber auf diese Weise haben Sie ein Design, das (meiner Meinung nach) flexibler ist. – npinti