【发布时间】:2016-12-11 20:34:26
【问题描述】:
我已将不可变类型存储在临时 CQRS 读取存储中(查询/读取端,实际上是由具有抽象访问层的简单列表实现的,此时我不想使用完整的文档数据库)。这些读取存储包含如下项目:
public class SomeItem
{
private readonly string name;
private readonly string description;
public SomeItem(string name, string description)
{
this.name = name;
this.description = description;
}
public string Name
{
get { return this.name; }
}
public string Description
{
get { return this.description; }
}
}
现在我想更改名称并在第二个命令中更改描述。 这些更改应保持当前状态,这意味着对于上面的示例:
// initial state
var someItem = new SomeItem("name", "description");
// update name -> newName
someItem = new SomeItem("newName", someItem.Description);
// update description -> newDescription
someItem = new SomeItem(someItem.Name, "newDescription");
如果您有多个属性,这对我来说确实很容易出错……您必须设法保持当前状态。我可以为每种类型添加类似 Clone() 的东西,但我认为/希望那里有更好的东西,性能良好且易于使用,我不想编写太多重复代码(懒惰的程序员)。有什么建议可以改进上面的代码吗? SomeItem 类需要保持不可变(通过几个不同的线程传输)。
【问题讨论】:
标签: c# clone immutability icloneable