Oft schreibe ich Funktionen, die so aussehen, weil ich damit leicht den Datenzugriff verspotten und trotzdem eine Signatur bereitstellen kann, die Parameter akzeptiert, um zu bestimmen, auf welche Daten zugegriffen werden soll.
public static string GetFormattedRate(
Func<string, RateType>> getRate,
string rateKey)
{
var rate = getRate(rateKey);
var formattedRate = rate.DollarsPerMonth.ToString("C0");
return formattedRate;
}
Oder
public static string GetFormattedRate(
Func<RateType, string> formatRate,
Func<string, RateType>> getRate,
string rateKey)
{
var rate = getRate(rateKey);
var formattedRate = formatRate(rate);
return formattedRate;
}
Dann benutze ich so etwas:
using FormatterModule;
public static Main()
{
var getRate = GetRateFunc(connectionStr);
var formattedRate = GetFormattedRate(getRate, rateType);
// or alternatively
var formattedRate = GetFormattedRate(getRate, FormatterModule.FormatRate, rateKey);
System.PrintLn(formattedRate);
}
Ist das eine gängige Praxis? Ich fühle mich wie ich etwas tun sollte
public static string GetFormattedRate(
Func<RateType> getRate())
{
var rate = getRate();
return rate.DollarsPerMonth.ToString("C0");
}
Das scheint aber nicht sehr gut zu funktionieren, da ich eine neue Funktion erstellen müsste, um für jeden Kurstyp in die Methode zu übergehen.
Manchmal habe ich das Gefühl, ich sollte es tun
public static string GetFormattedRate(RateType rate)
{
return rate.DollarsPerMonth.ToString("C0");
}
Dies scheint jedoch die Wiederverwendbarkeit von Abrufen und Formaten zu beeinträchtigen. Wann immer ich abrufen und formatieren möchte, muss ich zwei Zeilen schreiben, eine zum Abrufen und eine zum Formatieren.
Was vermisse ich an funktionaler Programmierung? Ist dies der richtige Weg, oder gibt es ein besseres Muster, das sowohl einfach zu warten als auch zu verwenden ist?
GetFormattedRate()
, die zu formatierende Rate als Parameter zu akzeptieren, als eine Funktion zu akzeptieren, die die zu formatierende Rate als Parameter zurückgibt.
closures
wo Sie den Parameter selbst an eine Funktion übergeben, die Ihnen im Gegenzug eine Funktion gibt, die sich auf diesen bestimmten Parameter bezieht. Diese "konfigurierte" Funktion würde als Parameter an die Funktion übergeben, die sie verwendet.