Frage

Im Moment arbeite ich an einer Web-Anwendung, die eine erhebliche Menge an Daten aus einer Datenbank erhält, die eine potentielle null Ergebnisse zurückgeben muss. Wenn man sich durch die zyklomatische Komplexität für die Anwendung eine Reihe von Funktionen in wiegen zwischen 10 - 30. In den meisten Fällen haben die meisten der Funktionen mit den hohen Zahlen viele Zeilen wie folgt:

If Not oraData.IsDBNull(4) Then row("Field") = oraData.GetString(4)

Was mich zu meiner Frage führt, was ist der beste Weg, zu versuchen, diese Zahlen nach unten zu gehen zu bringen? Im Moment bin ich schauen, um die Mehrheit der Funktionen unter 10 auf, die

War es hilfreich?

Lösung

Was ist mit Erweiterungsmethoden .

Imports System.Runtime.CompilerServices

Module Extensions

    <Extension()> _
    Public Function TryGetString(ByVal row As IDataRecord, i As Integer) As String
        If row.IsDBNull(i) Then
            Return null
        End If
        Return row.GetString(i);
    End Function

End Module

Dann können Sie einfach schreiben:

row("Field") = oraData.TryGetString(4)

Dieses liest glatt und reduziert zyklomatische Komplexität auf Ihre Funktionen.

Andere Tipps

Zerlege in Funktionen, vielleicht so etwas wie folgt aus:

//Object Pascal
procedure UpdateIfNotNull( const fldName: String; fldIndex : integer );
begin
  if oraData.IsDBNull( fldIndex ) then
    row( fldName ) := oraData.GetString(fldIndex);
end;

Natürlich können Sie die Prozeduren Signatur erweitern, so dass „oradata“ und „Zeile“ kann als Parameter übergeben.

Die erste Frage ist: Warum sind Sie „hängen“ oben auf CC? Es ist ein Werkzeug, um zu bewerten, wie dicht der Code und eine Daumenregel sollte „nicht zu hoch von einer cc-Nummer“.

sein

Wahrscheinlich ist schlagen alle, die „IF“ s und die Zahl der Erziehung - so die Anzahl der ifs reduzieren, indem eine Wrap-Funktion aufrufen, die die Daten aus der Ergebnismenge extrahiert, die die Null-Griffe oder die Abfrage ändern, so dass es nicht der Fall ist Rückkehr nulls.

Beachten Sie, dass NULL-Werte Informationen liefern und sind nicht nutzlos. Zum Beispiel Republikaner oder Demokrat? Verwendung sagt null weder Wahl.

Hast du diese Frage ? Er fragt etwas ähnliches (aber ich denke, bei einer grundlegenderen Ebene) ... aber dann das bedeutet, dass die Antworten gibt es nicht viel Hilfe hier sein kann.

Ich würde mit den anderen Vorschläge auf jeden Fall stimmen hier: Wenn es Aussagen wiederholt, die fein säuberlich in Funktionen / Prozeduren verpackt werden kann, das könnte ein Ansatz sein, so lange zu nehmen, da Sie nicht nur CC Verschiebung um. Ich bin mir nicht sicher, dass Sie zu viel gewonnen haben, wenn Sie von einem proc mit einem CC von 35 bis drei Procs mit CCs von 15 bewegen, 10 und 10. (Es ist kein schlechter erster Schritt, aber im Idealfall würden Sie in der Lage sein, etwas in einem größeren Umfang zu vereinfachen Gesamt CC in diesem Bereich Ihres Systems zu reduzieren.)

Es ist möglich, die , wenn in eine separate Hilfsfunktion Refactoring Ihre CC zu reduzieren. Eine Reihe von Funktionen oder eine Funktion auf Typ Differenzierung verlassen könnten die verschiedenen Datenbanktypen (string, int etc ..)

zu handhaben erforderlich

Allerdings würde ich argumentieren, dass jede Lösung in weniger wartbar oder lesbaren Code führen würde (das heißt Sie können andere Metriken verschlechtern!) Und würde als QA erlauben es nach dieser Begründung zu übergeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top