首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >描述克隆记录实例的设计模式

描述克隆记录实例的设计模式
EN

Software Engineering用户
提问于 2017-04-10 03:13:09
回答 2查看 89关注 0票数 0

我试图实现一个应用程序,但不想重新发明轮子。我一直在寻找一个最接近这个应用程序的设计模式,但是没有效果。

  1. 启动时,应用程序将提示管理员从任务列表中进行选择,并将所选任务复制到今年的任务中。
  2. 在整个一年中,正常用户将能够检查完成的任务。
  3. 在年底,管理员将表示该年的任务已结束。这意味着不能删除、修改任务,也不能添加新任务。
  4. 管理员将将完成的年度任务复制到下一年的任务中。

有谁知道设计模式或示例代码(或伪代码)是否与此匹配?

EN

回答 2

Software Engineering用户

发布于 2017-08-09 03:36:46

我建议你根本不需要“移动”列表。你只需要把任务归为属性。

您可以有一个表和/或实体,该表和/或实体包含/聚合所有任务,而不考虑状态或“年份”。让我们按此设计逐步完成工作流:

启动时的

启动时,应用程序将提示管理员从任务列表中进行选择,并将所选任务复制到今年的任务中。

系统检索处于“未分配”状态的所有任务的列表,并将其显示给管理员。管理员检查一些任务,系统将状态更改为“已分配”。

任何剩余的未分配任务都可以保持原样(这意味着管理员在下次访问系统时会得到提示),也可以将它们移到“延迟”状态。

普通用户检查任务

在整个一年中,正常用户将能够检查完成的任务。

系统检索并显示状态为“已分配”的所有任务。用户可以将其关闭。当他这样做时,系统将状态更改为“已完成”。

年终关闭

在年底,管理员将表示该年的任务已结束。这意味着不能删除、修改任务,也不能添加新任务。

系统检索状态为“已完成”的所有任务。管理员批准后,这些任务的状态将更改为“已关闭”。

系统只允许只读访问标记为已关闭的任务。

将任务转移到下一年

管理员将将完成的年度任务复制到下一年的任务中。

仍处于“指定”状态的任何任务都将继续执行。

请注意,这个设计没有任何“年份”的概念。在我看来,任何时候都只有一年的活动时间,所以它并不是真正需要的;你只需要知道哪些任务被分配或完成。如果需要将“年份”分配给他们,例如,对于报告或度量,您可以为每个任务存储一个DateAssignedDateCompletedDateClosed,并按年度或其他时间运行报告,如果您的组织曾经移动到季度、财政年度或其他时间。

如果“年份”确实是数据模型中一个关键任务的概念,那么您当然可以为“年份”添加另一列。“将”任务从一年转移到另一年的行为仅仅意味着更新该列。你根本不用动任何东西。

票数 1
EN

Software Engineering用户

发布于 2017-04-10 20:26:15

你可能是在问自己一个错误的问题,在这个时候,它看起来就像复制记录一样简单,但是在将来,即使现在,它也不是。您至少必须切换已完成的属性。您还必须检查访问权限,以查看用户是否拥有这样做的权限。

处决:

代码语言:javascript
代码运行次数:0
运行
复制
var task = repository.GetTask(id);
if (!currentUser.CanTransfer(task))
{
    throw new ApplicationException(" Sorry, I can't let you do that :( ");
}
var newTask = task.TransferToNextYear();
repository.Save(newTask);

班长:

代码语言:javascript
代码运行次数:0
运行
复制
public class Task : ITransferable
{
   string Key;
   DateTime? CompletedDate;
   DateTime CreateDate;
   string AssignedUser;
   // Lots of other fields

   public Task TransferToNextYear()
   {
       var newTask = new Task();
       newTask.CreateDate = DateTime.Now;
       newTask.CompletedDate = null;
       newTask.AssignedUser = null;
       newTask.string Key = GetNewKey();
       //Copy other fields
       return newTask;
   }
}
票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/346873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档