Laden...

Best Practice für Methodenaufruf bei unterschiedlichen Parametern

Erstellt von LeoBold vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.022 Views
L
LeoBold Themenstarter:in
13 Beiträge seit 2016
vor 7 Jahren
Best Practice für Methodenaufruf bei unterschiedlichen Parametern

Hi zusammen,

ich habe:

            if (AutoHighName(RFX_Name).isAutoHigh)
            {
                ClientRiskData.clientRiskCategory = Properties.Settings.Default.riskCategoryHigh;
                ClientRiskData.clientAutoHighReason = AutoHighReasonData.autoHighKey + " " + AutoHighReasonData.autoHighValue;
                ClientRiskData.clientNr = Nr;
                return ClientRiskData;
            }

und

        private AutoHigh AutoHighName(string RFX_Name)
        {
            if (autoHighName.Exists(kvp => kvp.Key == RFX_Name))
            {
                AutoHighReasonData.autoHighKey = RFX_Name;
                AutoHighReasonData.autoHighValue = autoName.First(kvp => kvp.Key == RFX_Name).Value;
                AutoHighReasonData.isAutoHigh = true;
                return AutoHighReasonData;
            }
            else
            {
                AutoHighReasonData.isAutoHigh = false;
                return AutoHighReasonData;
            }
        }

Ich habe insgesamt 12 Values, die die übergeordnete Methode empfängt.

Von den 12 Values werden 4 überprüft, ob diese in einer Liste vorhanden sind.

Ich könnte das Problem einfach lösen, und die zwei Methoden einfach vier mal kopiere und die Variablennamen / Listennamen ändern aber das ist doch irgendwie Schrott, oder?

RFX_Name ist die Variable, genauso wie Liste "autoName"

Hier möchte ich eine Überprüfung von RFX_Vorname, RFX_Alter, RFX_Geschlecht in Lists, die einen anderen Namen als "autoName" haben.

Könnt ihr mir hier einen Denkanstoß geben, oder ist das viermalige kopieren der Methode vielleicht sogar doch in Ordnung?

Vielen Dank!

3.003 Beiträge seit 2006
vor 7 Jahren

Zum einen benutzt du einige Klassen-Variablen, was die zwei Methoden beim Drüberschauen durch einen Dritten ziemlich unübersichtlich macht (dazu kommt die Benennung/Schreibweise deiner Variablen, die auch nicht durchgängig gleich ist, sondern irgendwie nach Lust und Laune...).

Zum anderen würde ich sehr kritisch sehen, dass du

a) eine Methode aufrufst, die eine Variable zurückliefert,die gleichzeitig eine Instanzvariable ist
b) einmal den Rückgabewert der Methode nutzt, und dann in der übernächsten Zeile stattdessen die Instanzvariable, die die Methode verändert hat (was man aber wissen muss!)

Zum dritten scheinst du Dictionaries zu benutzen, machst dir aber den Code zusätzlich unübersichtlich durch den Aufruf von Exists() statt ContainsKey.


var checkedName = AutoHighName(RFX_Name, autoList);
if(checkedName.isAutoHigh)
{
    ClientRiskData.clientRiskCategory = Properties.Settings.Default.riskCategoryHigh;
    ClientRiskData.clientAutoHighReason = $"{checkedName.autoHighKey} {checkedName.autoHighValue}";
    ClientRiskData.clientNr = Nr;
    return ClientRiskData;
}

private AutoHigh AutoHighName(string key, Dictionary<string, ???> valueList)
{
    return valueList.ContainsKey(key) 
    ? new AutoHigh 
       {
            autoHighKey = key,
            autoHighValue = autoName[key]
            isAutoHigh = true,
        }
     : new AutoHigh { isAutoHigh = false };
}

Umbenennen:*alles, was autoHigh ist (kein Mensch weiß, was das bedeuten soll) *alle Properties der Klasse AutoHigh (Großschreibung!) *autoName zB in _autoNameList o.ä., wenn du keinen führenden Unterstrich für Instanzvariablen nutzen willst, benutz IMMER this. zum Aufruf)

  • RFX_Name, Unterstriche im Namen sind in C# unüblich

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

L
LeoBold Themenstarter:in
13 Beiträge seit 2016
vor 7 Jahren

Cool, dank dir!

Steile Lernkurve heute. Die Bezeichner waren schlamperhaft "anonymisiert"

Danke!