c# - 以命令模式保存系统
问题描述
我在 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,但如果有机会我可以避免创建所有这些类并保持代码干净,我很想知道这是否可能。
解决方案
阅读相关评论后我所知道的:
首先,我应该将更复杂的任务划分为单个原子Step
的结构,其中包含有关整个任务中当前步骤的数据。然后保存当前正在运行的任务和步骤以及执行它所需的数据。
接下来必须有一个工厂,它知道如何从保存的数据中重新创建当前步骤的任务。
推荐阅读
- postgresql - PostrgreSql 数据库写/读统计
- excel - 使用excel在Word文档中添加表格
- bootstrap-4 - Bootstrap4 手风琴不工作。请检查我的代码
- java - FreeMarker 模板错误:JSONArray 包装到 febStringModel
- c++ - 无法在头文件中包含标头,但可以包含在 cpp 中
- r - 在 stargazer 中混合和匹配来自 multinom 模型的协变量
- postgresql - postgres 的默认密码
- angular - Angular如何正确获取类元素?
- python - 分配变量 Python 时出现语法错误
- css - 全局导入 scss 变量,可用于所有角度组件