我有一个对象层次结构,它们都具有相似的行为。我想将行为与 POCO 定义分开。由于行为代表将对象移动到各种状态,因此在我看来,这就像状态模式的工作。但是,它并不像每个函数只有一个定义那么简单,因为每个对象的行为可能略有不同。
例如,假设我有以下基于抽象基类的类:
public abstract BaseClass
{
public int Property1 { get; set; }
public int Property2 { get; set; }
}
public Class1 : BaseClass
{
public string PropertyA { get; set; }
public string PropertyB { get; set; }
}
public Class2 : BaseClass
{
public string PropertyC { get; set; }
public string PropertyD { get; set; }
}
层次结构表示不同类型的对象。假设所有对象都遵循相同的基本工作流程:提交、批准、执行、关闭。
现在,每个函数的行为也是分层的,这意味着在 Class1 上调用函数 Approve() 应该与调用从 BaseClass 继承的行为相同,但 Class2 将覆盖 Approve() 函数,因为该类型遵循不同的批准过程。
我在尝试将状态模式应用于这些对象时迷失了方向。我可以选择将函数放在对象本身上并以这种方式继承它们,效果很好,但它破坏了 POCO 设计。我还可以为每个对象类型使用 switch 语句来实现 Approve() 函数,但这会破坏我的多态设计。
如何将状态模式应用于多层多态对象定义并与设计原则保持一致。
更新:让我澄清一下,我认为除了作用于对象之外做其他事情的功能不属于 POCO。例如:Approve 函数将发送电子邮件并触发其他系统中的事件,而不仅仅是修改对象的状态。也许这只是我。