首页 > 解决方案 > 以命令模式保存系统

问题描述

我在 Unity、c# 中为我的员工保存任务时遇到问题。我将他们的任务实现为像命令模式一样使用方法(协程)作为任务算法。现在我必须将他们的任务保存到磁盘并稍后加载它们以恢复它们。

例子:

任务界面:

interface IEmployeeTask
{
    IEnumerator PerformTask();
}

员工.cs

...
public WorkOnTask(IEmployeeTask task)
{
    this.currentTask = task;
    StartCoroutine(task.PerformTask());
}
...

两个任务实现:

class SomeTask1 : IEmployeeTask
{
    ...
    public SomeTask1(int someImportantParameter){...}

    public override IEnumerator PerformTask
    {
        assignedEmployee.GoThere();
        yield return new WaitUntil(() => assignedEmployee.ReachedDestination);
        assignedEmployee.DoThis();
        yield return new WaitUntil(() => assignedEmployee.DidThis);
        assignedEmployee.UseParameter(someImportantParameter);
    }

}
class SomeTask2
{
    ...
    public SomeTask2(SomeClass someImportantReference){...}

    public override IEnumerator PerformTask
    {
        IThinkYouKnowWhereThisIsGoing();
        LemmeJustUseSomeObject(someImportantReference);
        yield break;
    }
}

我无法重新启动这些任务,因此仅通过 new 或 Activator 创建任务并分配引用将无济于事。

我可以创建一个保存类并进行抽象TaskSave IEmployeeTask.GetSave()IEmployeeTask.LoadFrom(TaskSave save)并为每个任务实现一个类,其中包含一些丑陋public readonly int referenceId的 s,但如果有机会我可以避免创建所有这些类并保持代码干净,我很想知道这是否可能。

标签: c#unity3dcoroutinestrategy-patternsaving-data

解决方案


阅读相关评论后我所知道的:

首先,我应该将更复杂的任务划分为单个原子Step的结构,其中包含有关整个任务中当前步骤的数据。然后保存当前正在运行的任务和步骤以及执行它所需的数据。

接下来必须有一个工厂,它知道如何从保存的数据中重新创建当前步骤的任务。


推荐阅读