软件设计:EEPROM对象模型

时间:2015-08-14 13:44:42

标签: c# oop design-patterns

我有一个产品在生产过程中将非易失性值存储在EEPROM中。我目前将EEPROM建模为一个结构体,因此我可以很容易地对缓冲区进行编组。

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public class EEPROM
{
    public const ushort MEMORY_VERSION = 0x01;
    ushort memoryVersion;
    byte value1 = 0;
    byte value2 = 0;
    public EEPROM() : this(MEMORY_VERSION) { }

    protected EEPROM(ushort memoryVersion) { this.memoryVersion = memoryVersion; }
}

这些装置投入使用后的一段时间,我可能需要添加一个新的EEPROM设置。我需要想出一种方法来处理EEPROM的现场更新。我们的升级过程不能很好地支持外部应用程序,因此我需要处理系统中的升级。

我的第一个想法是添加虚拟升级方法。

public virtual void Update() {}

然后在新的

中继承过时的EEPROM结构
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public class EEPROM_V2 : EEPROM
{
    public new const ushort MEMORY_VERSION = 0x02;
    byte value3 = 0;

    public EEPROM_V2() : base(MEMORY_VERSION) { }
    protected TestEeprom(ushort memoryVersion) : base(MEMORY_VERSION) { }

    public override void Upgrade() { base.Upgrade(); value3 = 0; }
}

但这会迫使EEPROM的客户端更改为EEPROM_V2。我必须过分思考这一点。如果我只是添加新值,我很容易就会产生一个讨厌的if语句链。

if( memoryVersion == X) { do this }
if( memoryVersion == Y) { do this }
etc...  

0 个答案:

没有答案