【发布时间】:2012-08-03 13:06:56
【问题描述】:
假设我有这个简单的类
public class MyEntity
{
public DateTime DateUpdated { get; private set; }
public string Author { get; private set; }
public string Comment { get; private set; }
public void AddComment(string comment, string author)
{
Author = author;
Comment = comment;
DateUpdated = DateTime.Now;
}
}
我已将 setter 设为私有以封装类,并添加了 AddComment 方法以向我的类添加一些行为。这在创建新对象时工作得非常好,但是当我想从数据库加载实体时,DateUpdated 当然设置为我想避免的当前日期。
是否有任何模式可以用来避免公开 DateUpdated 设置器,因为这似乎破坏了我的良好封装并弄乱了类的干净接口?当然,这个类只是一个更一般的问题的例子。
在不创建更多公共构造函数的情况下,我现在最接近的是创建一个私有构造函数,我通过公共静态方法访问它。
【问题讨论】:
-
为什么 DateUpdated 的 setter 是私有的?恕我直言,实体不必为所有事情都有私人二传手。对于值类型,这当然是另一回事。
-
这只是任何只读属性的一个例子,只能通过我的特定方法进行更改。
-
只是好奇,你最终为此做了什么?我遇到了同样的问题。