这不是一个问题,而是一份评论请求。
我一直讨厌在命名属性或变量时包含日期或日期时间类型的日期。例如:
DateTime DateFileOpened {get; set;}
在我看来,我把数据类型包含在变量名中。
我想采用的方式是,在日期的地方使用单词“When”,例如:
DateTime WhenFileOpened {get; set;}
通常,我从布尔变量/属性中使用Is或Has来窃取这个想法。
所以问题是:是否有更好的日期命名约定?
这不是一个问题,而是一份评论请求。
我一直讨厌在命名属性或变量时包含日期或日期时间类型的日期。例如:
DateTime DateFileOpened {get; set;}
在我看来,我把数据类型包含在变量名中。
我想采用的方式是,在日期的地方使用单词“When”,例如:
DateTime WhenFileOpened {get; set;}
DateFileOpened
符合此标准,而WhenFileOpened
则不符合。
在这些情况下,通过检查核心.NET框架类所使用的属性名称可以帮助解决问题。以下代码将从所有已加载的程序集中提取类型为DateTime
的所有属性名称:
foreach (var v in AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(a=>a.GetTypes())
.Where(a=>a.IsClass)
.SelectMany(a=>a.GetProperties())
.Where(a=>a.PropertyType == typeof(DateTime)))
Console.WriteLine("{0}.{1}", v.DeclaringType, v.Name);
______Date
,____Time
(例如:System.Net.Mime.ContentDisposition.CreationDate
,System.Net.HttpWebRequest.Date
,System.Timers.ElapsedEventArgs.SignalTime
)。仅使用Date
可能会让人感到困惑,因为返回的可能是日期和时间,但仅使用Time
则可能更少歧义。 (返回不带日期的时间的属性将具有TimeSpan
类型而不是DateTime
类型。)
_____DateTime
,_____TimeStamp
。(例如:System.Globalization.GregorianCalendar.MinSupportedDateTime
,System.Diagnostics.TraceEventCache.DateTime
,System.Net.Cookie.Timestamp
)。这种约定很冗长,但可以明确地表示整个时间戳(日期+时间)。
两者都没有。(例如:System.Net.FtpWebResponse.LastModified
,System.Globalization.DaylightTime.Start
,System.Net.Cookie.Expires
)。不在名称中包括返回类型与大多数属性名一致(例如String.Length
而不是String.LengthInt
)。
由于没有一致的方法,因此任何这些模式都可能被视为可接受的。
但是,作为一种偏好,DateFileOpened
暗示文件只能打开一次。 如果不是这种情况,则像FileLastOpened
或甚至只是LastOpened
之类的属性名称可以意味着返回类型为DateTime
而不包括在属性名称中。 如果无法避免,则像FileOpenedTime
这样的名称符合.NET指南,与Framework属性名称一致且不含糊。
我也不喜欢在DateTime变量中指定“日期”时的冗余。
作为替代方案,您可以使用:
DateTime OpenedOn { get; set; }
var fileOpenedOn = file.OpenedOn;
希望您的阅读流畅。
我通常使用“date_”作为前缀:
date_created
date_end
date_deleted
date_modified
那么,您可以将日期命名约定命名为“date_FileOpened”