Tôi thường thấy mình viết các hàm trông như thế này vì chúng cho phép tôi dễ dàng giả định truy cập dữ liệu và vẫn cung cấp chữ ký chấp nhận các tham số để xác định dữ liệu nào sẽ truy cập.
public static string GetFormattedRate(
Func<string, RateType>> getRate,
string rateKey)
{
var rate = getRate(rateKey);
var formattedRate = rate.DollarsPerMonth.ToString("C0");
return formattedRate;
}
Hoặc là
public static string GetFormattedRate(
Func<RateType, string> formatRate,
Func<string, RateType>> getRate,
string rateKey)
{
var rate = getRate(rateKey);
var formattedRate = formatRate(rate);
return formattedRate;
}
Sau đó, tôi sử dụng nó như thế này:
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);
}
Đây có phải là một thực tế phổ biến? Tôi cảm thấy mình nên làm một cái gì đó giống như
public static string GetFormattedRate(
Func<RateType> getRate())
{
var rate = getRate();
return rate.DollarsPerMonth.ToString("C0");
}
Nhưng điều đó dường như không hoạt động tốt bởi vì tôi phải tạo một hàm mới để truyền vào phương thức cho mọi loại tỷ lệ.
Đôi khi tôi cảm thấy mình nên làm
public static string GetFormattedRate(RateType rate)
{
return rate.DollarsPerMonth.ToString("C0");
}
Nhưng điều đó dường như lấy đi mọi khả năng tìm nạp và định dạng lại. Bất cứ khi nào tôi muốn tìm nạp và định dạng, tôi phải viết hai dòng, một để tìm nạp và một để định dạng.
Tôi còn thiếu gì về lập trình chức năng? Đây có phải là cách đúng đắn để làm điều đó, hay có một mô hình tốt hơn vừa dễ bảo trì và sử dụng?
GetFormattedRate()
khi chấp nhận tỷ lệ định dạng dưới dạng tham số, trái ngược với việc nó chấp nhận hàm trả về tỷ lệ để định dạng dưới dạng tham số?
closures
nơi bạn truyền tham số chính nó cho một hàm, đổi lại cung cấp cho bạn một hàm tham chiếu đến tham số cụ thể đó. Hàm "được cấu hình" này sẽ được truyền dưới dạng tham số cho hàm, sử dụng hàm này.