2022 鐵人賽文 搬回點部落
開始試煉
先來看一下程式碼 這是產CSV的示意程式碼
void Main()
{
var sb = new StringBuilder();
var prodcut = new Prodcut { Name = "Sports & Outdoors", Price = 1200 };
sb.Append($"{nameof(prodcut.Name)}");
sb.Append(",");
sb.AppendLine($"{nameof(prodcut.Price)}");
sb.Append(prodcut.Name);
sb.Append(",");
sb.Append(prodcut.Price);
sb.AppendLine();
sb.ToString().Dump();
}
public class Prodcut
{
public string Name { get; set; }
public int Price { get; set; }
}
程式碼可以看到為了要加, 用兩種方法
但是這樣的程式碼很不好閱讀
所以可以用擴充方法來幫忙讓程式碼可讀性
void Main()
{
var sb = new StringBuilder();
var prodcut = new Prodcut { Name = "Sports & Outdoors", Price = 1200 };
sb.AppendCsv($"{nameof(prodcut.Name)}");
sb.AppendLine($"{nameof(prodcut.Price)}");
sb.AppendCsv(prodcut.Name);
sb.AppendLine(prodcut.Price.ToString());
sb.ToString().Dump();
}
public static class StringBuilderExtensions
{
public static StringBuilder AppendCsv(
this StringBuilder stringBuilder,
string value) => stringBuilder.Append($"{value},");
}
像是Linq 自己本身就是用擴充方法 實做完成的
可以加上自己的擴充方法 讓可讀性更佳
正常來說分頁一定要先算出 第幾頁 有一頁幾筆
才知道要跳過多少筆 再來要取幾筆
public static class IQueryableExtension
{
public static IQueryable<T> Page<T>(
this IQueryable<T> @list,
int page,
int pageSize)
{
var skip = (page - 1) * pageSize;
return @list.Skip(skip).Take(pageSize);
}
}
使用起來就是這樣query = query.OrderBy(x => x.Price).Page(inputDto.Page, inputDto.PageSize);
把細節邏輯封裝到擴充方法內 加上一個好的命名
這樣程式碼的可讀性 就可以提高
結束試煉
程式碼可讀性寫的好 連維護都簡單許多喔
如果內容有誤請多鞭策謝謝