我有以下场景:
我正在设计一个MVVM应用程序,它通过串行端口或其他方式与一些计算机外部设备通信。每个Device
都有一些属性,如id、名称等,另外还由不同的Module
组成,它们有自己的属性。我有一种xml数据库来保存和加载设备。每个Device
都有自己的文件。总之:
应用程序通过一种存储库加载所有文件,并提供一个Devices
列表,以选择实际连接的文件或创建一个新文件。当我选择了当前的Device
时,我会得到一个页面,该页面表示基于设备类型的Modules
列表。即:
Device_Type_A
由Module_A
和Module_B
组成
Device_Type_B
由Module_A
和Module_C
组成
Modules
的属性是通过通信填充的。现在,我想将Modules
的状态保存为一种模块状态历史,并保存到当前设备的xml文件中。
这样做的最佳做法是什么?创建一个基于Fowlers快照的ModuleSnapshot
类并存储它有用吗?或者我必须做一种不可变的值对象并将其存储到文件中?
设备是实体,但模块历史记录条目感觉像是值对象。我也想显示已加载设备文件的历史记录。是否需要一个Module
类作为通信内容的Model,以及一个类作为它的不可变值对象副本(如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; }
// ...
}
保存对象状态以备将来使用。。。。。。。。。Memento图案