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
- 要维护的附加表
Version
和Published
列,并放宽使用原始主键强制执行一行的限制,改为允许多行,但只有一行的Published
列设置为true
专业人士
- 没有要维护的附加表
- 无需两次写入行(只需在单个事务中删除旧行,并在新行上翻转
位)已发布的
- 可能更复杂的约束/应用程序验证
- 加入
列时的附加检查(容易忘记)已发布
CarModifications
表中,例如,可能作为部分JSON对象,或者作为一个数字或行,每个数字或行表示目标表上一列的值更改。如果需要,可以将多行分组为单个OperationId
专业人士
- 不更改目标表
- 跨多个表的多个更改可以在单个操作id上键入,并应用于事务中
- 更复杂的建模
- 更复杂的验证