随着信息技术的快速发展,工作流对于信息系统的作用变得越来越重要,特别是OA系统、ERP系统等。今天我给大家分享一款的基于ASP.NETCORE+Layui的工作流系统openAuth.Core。OpenAu.Core是目前国内首款基于.NETCore开源的工作流系统。在讲解OpenAuth.Core之前我们先了解一下什么是工作流。
工作流与工作流系统
工作流(Workflow)就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。
工作流系统(WorkflowSystem)是可以将工作流程以软件的形式呈现出来,将各个工作流程可视化、可操作化,将工作流程自动运行起来。
源码介绍
openAuth.Core官方介绍说采用经典DDD架构(用沃恩.弗农大神的话,其实这是DDD-Lite)思想进行开发,简洁而不简单,实用至上,并且所写每一行代码都经过深思熟虑,符合SOLID规则!
下载源码后,感觉项目并不是那么DDD(领域驱动开发),这个与原本的DDD思想还是有很多的差距。可能是因为这个项目是开源版本,所以有些功能被阉割掉了。
纵观整个源码,还是有一些值得借鉴的地方,我看源码都有一个很重要的原则,就是取其精华,去其糟粕。
运行环境
IDE:VisualStudio
数据库:SqlServer+,Mysql5.6+
.netcore框架升级至.netcoresdk3.1.
layui升级到2.5.6
项目源码结构:
OpenAuth.Repository系统仓储层,包含了领域对象和用于数据库操作的类OpenAuth.App应用层,为界面提供接口OpenAuth.IdentityServer集成IdentityServer4,实现基于OAuth2的登录体系OpenAuth.MvcWeb站点Infrastructure通用工具集合OpenAuth.WebApiSSO服务及为第三方提供接口服务
源码的2个亮点
1.实现了一套“工作单元”提交的机制。
领域驱动开发思想中有一个非常重要的概念,叫做工作单元(UnitOfWork),弄清楚这套机制,也是理解领域驱动思想重要的一环。其实工作单元提交的本质就是多个数据库操作(如新增、修改、删除)在一个上下文会话里面一起提交。
///summary///添加或更新入库通知单////summary///paramname=req/parampublicvoidAdd(AddOrUpdateWmsInboundOrderTblReqreq){varobj=req.MapToWmsInboundOrderTbl();//todo:补充或调整自己需要的字段obj.CreateTime=DateTime.Now;varuser=_auth.GetCurrentUser().User;obj.CreateUserId=user.Id;obj.CreateUserName=user.Name;UnitWork.Add(obj);if(req.WmsInboundOrderDtblReqs!=nullreq.WmsInboundOrderDtblReqs.Any()){foreach(vardetailinreq.WmsInboundOrderDtblReqs){detail.OrderId=obj.Id;_wmsInboundOrderDtblApp.AddNoSave(detail);}}UnitWork.Save();}
2.EntityFrameworkCore的深入应用
下面这段代码非常有代表性,在进行实体更新的时候,判断一下实体的状态是否发生过变化,如果没有变化,则不做修改,大大的提高了系统的性能。如果你想深入学习EFCore方面的技术,可以研究这个代码。
///summary///实体////summary///typeparamname=T/typeparam///paramname=entity/parampublicvoidUpdateT(Tentity)whereT:class{varentry=this._context.Entry(entity);entry.State=EntityState.Modified;//如果数据没有发生变化if(!this._context.ChangeTracker.HasChanges()){entry.State=EntityState.Unchanged;}}
项目运行
使用VisualStudio打开解决方案文件OpenAuth.Core.sln。然后编译项目,项目在我本地可以一次性编译通过。创建OpenAuthDB数据库。项目包含SqlServer脚本与MySql脚本。选择OpenAuth.MvcWeb项目,直接按F5键运行,就可以打开一个命令窗口,然后在浏览器中输入