2022 鐵人賽文 搬回點部落
如何處理Magic strings
void Main()
{
var now = DateTime.Now
var nowDate = now.ToString("yyyy-MM-dd").Dump();
var startDate = now.AddDays(-7).ToString("yyyy-MM-dd").Dump();
var endDate = now.AddDays(-1).ToString("yyyy-MM-dd").Dump();
}
"yyyy-MM-dd" 就是 Magic strings
常見的修改像是
void Main()
{
var dateformat = "yyyy-MM-dd"
var now = DateTime.Now
var nowDate = now.ToString(dateformat).Dump();
var startDate = now.AddDays(-7).ToString(dateformat).Dump();
var endDate = now.AddDays(-1).ToString(dateformat).Dump();
}
但是 一個系統之中 會用到顯示時間應該會有很多地方
每個方法內都有自己的dateformat很容易就不一致
void Main()
{
var now = DateTime.Now;
var nowDate = now.ToString(DateTimeFormatSetting.DateFormat).Dump();
var startDate = now.AddDays(-7).ToString(DateTimeFormatSetting.DateFormat).Dump();
var endDate = now.AddDays(-1).ToString(DateTimeFormatSetting.DateFormat).Dump();
}
public class DateTimeFormatSetting
{
public static readonly string DateFormat = "yyyy/MM/dd";
public static readonly string DateFormatWithoutYear = "MM/dd";
}
建立 DateTimeFormatSetting 物件 將相關的 Magic strings 放在一起
當有需求變更的時候 請改成 "yyyy-MM-dd" 就很好處理了
延伸試煉
Miniblog.Core 這個專案內可以看到大師是怎樣處理Magic strings
在拿取 appsettings.json 的資料時 時也用到相似的概念 更是優秀
(EX:Config.Blog.Name => "blog:name")
請務必前往觀摩大師的程式碼
https://github.com/madskristensen/Miniblog.Core/blob/master/src/Constants.cs
結束試煉
string 是很常用到感覺很簡單 但是卻又很深奧的 這次應該有不少篇幅會以string為主題
今天的試煉就到這邊 下個試煉見
程式碼都是用LINQPad 5寫的應該複製貼上就可以執行
參考
What is wrong with magic strings?
如果內容有誤請多鞭策謝謝