将对象的状态保存到历史列表并恢复它的最佳做法是什么?

时间:2012-08-01 19:10:29

标签: c# design-patterns history snapshot value-objects

我有以下情况:

我正在设计一个MVVM应用程序,它通过串口或某些东西与一些计算机外部设备通信。每个Device都有一些属性,如id,名称等,另外还包含具有各自属性的不同Module。 我有一种xml数据库来保存和加载设备。每个Device都有自己的文件。无论如何:

应用程序通过一种存储库加载所有文件,并提供Devices列表以选择实际连接的文件或创建新文件。当我选择当前Device时,我会根据设备的类型获得一个代表Modules列表的页面。即:

Device_Type_AModule_AModule_B

组成

Device_Type_BModule_AModule_C

组成

...

Modules的属性通过通信填充。现在我想将Modules的状态保存到当前设备的xml文件中的某种模块状态历史记录。

这样做的最佳做法是什么?基于Fowlers Snapshot创建ModuleSnapshot类并存储它是否有用?或者我必须做一种不可变的值对象并将其存储到文件中?

设备是实体,但模块历史记录条目感觉像值对象。我也想显示加载的设备文件的历史记录。是否需要Module类作为通信内容的模型,并且需要一个类的不可变值对象副本,如ModuleHistory

这样的东西?

public class Device_Type_A : DeviceBase
{
    // Some special Type_A properties ...
    public string Type_A_Shape{get; set;}
    // ...       
}

public class DeviceBase
{
    public string Id  { get; private set; }
    public string DeviceName { get; private set; }
    public List<ModuleHistory> History { get; private set; }
    // ...
}

1 个答案:

答案 0 :(得分:2)

保存对象的状态以备将来使用......... Memento Pattern