日期属性的命名规范

4

这不是一个问题,而是一份评论请求。

我一直讨厌在命名属性或变量时包含日期或日期时间类型的日期。例如:

DateTime DateFileOpened {get; set;}

在我看来,我把数据类型包含在变量名中。

我想采用的方式是,在日期的地方使用单词“When”,例如:

DateTime WhenFileOpened {get; set;}

通常,我从布尔变量/属性中使用Is或Has来窃取这个想法。
所以问题是:是否有更好的日期命名约定?
3个回答

6
MSDN属性命名约定提出,属性名称应为名词或名词短语,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);

输出显示了几种命名约定。
  1. ______Date____Time(例如:System.Net.Mime.ContentDisposition.CreationDateSystem.Net.HttpWebRequest.DateSystem.Timers.ElapsedEventArgs.SignalTime)。仅使用Date可能会让人感到困惑,因为返回的可能是日期和时间,但仅使用Time则可能更少歧义。 (返回不带日期的时间的属性将具有TimeSpan类型而不是DateTime类型。)

  2. _____DateTime_____TimeStamp。(例如:System.Globalization.GregorianCalendar.MinSupportedDateTimeSystem.Diagnostics.TraceEventCache.DateTimeSystem.Net.Cookie.Timestamp)。这种约定很冗长,但可以明确地表示整个时间戳(日期+时间)。

  3. 两者都没有。(例如:System.Net.FtpWebResponse.LastModifiedSystem.Globalization.DaylightTime.StartSystem.Net.Cookie.Expires)。不在名称中包括返回类型与大多数属性名一致(例如String.Length而不是String.LengthInt)。

由于没有一致的方法,因此任何这些模式都可能被视为可接受的。

但是,作为一种偏好,DateFileOpened暗示文件只能打开一次。 如果不是这种情况,则像FileLastOpened或甚至只是LastOpened之类的属性名称可以意味着返回类型为DateTime而不包括在属性名称中。 如果无法避免,则像FileOpenedTime这样的名称符合.NET指南,与Framework属性名称一致且不含糊。


“Expires”这个名称有些误导人,尤其是在“Cookie”示例中……从外部来看,它也可以被解读为一个布尔属性。 - julealgon

6

我也不喜欢在DateTime变量中指定“日期”时的冗余。

作为替代方案,您可以使用:

DateTime OpenedOn { get; set; }

命名方法对于不了解上下文的读者来说很困难;如果这个方法存在于一个用于存储文件属性的类中,则:
var fileOpenedOn = file.OpenedOn;

希望您的阅读流畅。


-5

我通常使用“date_”作为前缀:

date_created
date_end
date_deleted
date_modified

那么,您可以将日期命名约定命名为“date_FileOpened”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接