Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 针对不同类型实体的可扩展审批工作流的系统设计_C#_Workflow_System Design - Fatal编程技术网

C# 针对不同类型实体的可扩展审批工作流的系统设计

C# 针对不同类型实体的可扩展审批工作流的系统设计,c#,workflow,system-design,C#,Workflow,System Design,我正在寻找一种高效的方法来为我所在领域的一些实体创建草稿并启动审批工作流。用户应轻松跟踪更改并批准或拒绝更改。请您推荐一个通用模型/方法/路线图,以便轻松提供这些功能 假设我有这个模型: public class CourierDistributionArea { public City City { get; set; } public Courier Courier { get; set; } } public class City { public int Id

我正在寻找一种高效的方法来为我所在领域的一些实体创建草稿并启动审批工作流。用户应轻松跟踪更改并批准或拒绝更改。请您推荐一个通用模型/方法/路线图,以便轻松提供这些功能

假设我有这个模型:

public class CourierDistributionArea
{
    public City City { get; set; }
    public Courier Courier { get; set; }
}

public class City
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Courier
{
    public int Id { get; set; }
    public string Name { get; set; }
}

假设用户添加、更新或删除一些CourierDistributionArea实体。您将如何存储这些实体的新待定审批版本?您将如何设计此系统以轻松添加此审批工作流中使用的新型实体?您将如何向最终用户展示变更集?

有许多选项,这些选项将取决于您的用户可能进行的更改、多个用户是否可以同时提供备选草稿,以及您希望使用的存储(我无意中假设了一些基于表的RDBMS,如SQL Server)

1.表格草稿 在
card
表旁边创建一个
CarDraft
表。目标表中的所有列都应该出现在草稿表中,以及与草稿本身相关的元数据所需的任何其他列。批准草稿后,将相关列插入目标表并删除草稿

专业人士

  • 不需要在同一个表中支持同一实体的多个版本
  • 草稿不会以任何方式影响目标表上的OLTP
缺点

  • 要维护的附加表
2.版本化实体 在目标表上创建
Version
Published
列,并放宽使用原始主键强制执行一行的限制,改为允许多行,但只有一行的
Published
列设置为true

专业人士

  • 没有要维护的附加表
  • 无需两次写入行(只需在单个事务中删除旧行,并在新行上翻转
    已发布的
    位)
缺点

  • 可能更复杂的约束/应用程序验证
  • 加入
    已发布
    列时的附加检查(容易忘记)
3.转型审批 同样,根据用户可以执行的修改实体的操作,您可以将更改操作本身而不是新状态存储为草稿。这可以存储在
CarModifications
表中,例如,可能作为部分JSON对象,或者作为一个数字或行,每个数字或行表示目标表上一列的值更改。如果需要,可以将多行分组为单个OperationId

专业人士

  • 不更改目标表
  • 跨多个表的多个更改可以在单个操作id上键入,并应用于事务中
缺点

  • 更复杂的建模
  • 更复杂的验证

你为什么投票结束这个问题?如果stackoverflow不是解决此类问题的合适场所,您建议使用什么平台?您的问题太广泛了。它有多个主题/问题空间,我会创建一个开发者Salesforce帐户并使用他们内置的工作流审批流程:p——说真的,如果这是一项任务,而不是一项与工作相关的任务,并且你可以自由地使用任何你想要的,那么这可能是最简单的选择(主要是点击式——如果您了解Salesforce管理,那么就更容易了,如果您了解Apex,这将根据您想要进行的任何定制而有所帮助)。还有一些方法可以将Salesforce与您的应用程序集成。除非您已经知道如何使用这些方法,但这可能不是最简单的方法。新草稿是基于最新的草稿,还是仅基于已批准的更改?@TamaMcGlinn新草稿应仅基于已批准的更改。