论文部分内容阅读
摘要:该文介绍了一个在ORM层面使用EntityFramework的倉库管理系统的设计方案。在表示层使用了ASP.NETMVC5,这个也是ASP.NETMVC Core之前的最后一个版本。系统利用了EntityFramwork的一些特性,基于Lambda表达式设计了一些通用的函数,极大地提升了系统的可重用性和可拓展性。基于这套底层框架,以后可以应对各种不同的需求进行快速开发。
关键词:EntityFramework;ORM;Lambda表达式
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2020)13-0091-02
1项目背景及需求
广东邮电职业技术学院有2个大型餐厅为各大师生以及培训人员提供用餐服务。每天的食材进出非常频繁,而且每月需要导出规定格式的报表供财务对账使用。月度供应商需要更新货品的供应品类和对应价格,并且后续有供应商比价的需求。而目前市面上的一些ERP软件,比如用友、金蝶、管家婆等等,其功能都过于繁杂,不利于餐厅管理人员使用,故委托本团队开发一套具有针对性的仓库管理系统,主要功能在于食材的进库、出库、报价、报表导出的管理。
2系统设计
本系统使用了ASP.NET MVC5后端架构,运行在IIS服务器上。前端主要使用Bootstrap框架实现用户界面。数据库使用SQL Server 2008R2,运行在阿里云服务器上。
系统设计:系统除了用户表以外,核心业务表为产品表、供应商表、报价表、品类表、进出记录表,具体列设计可参考图1。为了提高数据库性能,我们删除了大部分外键约束,对象直接关系通过EntityFramework代码在实体类里面体现。
整个系统使用流程设计如下:
1)报价单的导入:根据用户的使用习惯,从便利用户的角度出发设计,用户利用Excel导入供应商报价单,这里可能会分别产生产品(食材)表、品类表、供应商表、报价表几个表的数据,但最终用户比较关心的是报价表里面的数据。用户不需要关心产品的ID信息,这个在导人的Excel里面也没有体现,同一个供应商下面相同名称的产品会拥有相同的产品ID;
2)入库:用户安装供应商供货的Excel进行导人,实际的供货价格可以跟报价有所下降,但不能超出月度报价。也支持单条记录人工录入,但从实际应用场景来看,单条数据录入的使用几率不大;
3)出库:用户在Web管理界面批量选择需要出库的食材,同一批出库的食材可以来自不同的供应商,不同的进货日期。出库时货品数量安装先进先出的原则进行减扣,优先消耗较早的食材;
4)月度报表:每月底,导出本月的进出仓记录,供财务部门核对以及部门进货规划使用。
3系统特色
本系统在前后端设计领域都有所创新。前端方面,主要是管理后端类型的页面,原则上是有不少现成的uI框架可以直接套用,比如本团队之前一直在使用的AdminLTE。但这些框架一般体积都比较大,这样的弊端是页面首次加载时间较长。为了解决这个问题,我们基于Bootstrap自己写了一套前端皮肤,效果见图2。配合我们的后端程序,可以做到类似C/S程序的ComboBox组件,在下拉菜单里实现输入选项模糊查询的功能,这个功能目前在B/S系统里面都比较少见,但是对用户体验有较大的提升。
后端框架设计方面,由于EntityFramework已经提供了非常便利的上下文(DbContext)类供数据库操作使用了,能够覆盖大部分的业务场景。唯一不便的就是每个数据表或者视图的带条件分页查询,为此,我们设计了一个通用的DAO类,把实体类作为泛型参数继承一下就可以使用,里面包含了通用的分页函数。而且借助Lambda表达式,我们目前做到了后端零SQL语句,所有数据库操作都通过实体类而不是无法进行语法校验的字符串SQL语句。这样带来的好处是,万一系统进行升级,数据库结构发生改变,Lambda表达式也会做出相应的校验,排除了大部分结构升级带来的代码隐患。
4总结与展望
系统刚投入使用不久,由于设计前期投入了大量的调研工作,历时一年进行定制开发,用户表示使用过程流畅舒适,系统功能实用,界面虽算不上华丽,但也算是整洁干净,可见我们在减少用户操作、优化用户体验方面的努力没有白费。
未来,该系统还计划加入供应商横向比价、二维码扫描进出库、食材跟踪等功能。从技术角度来看都是可以实现的,唯一需要考虑的就是项目进度的时间安排而已。
关键词:EntityFramework;ORM;Lambda表达式
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2020)13-0091-02
1项目背景及需求
广东邮电职业技术学院有2个大型餐厅为各大师生以及培训人员提供用餐服务。每天的食材进出非常频繁,而且每月需要导出规定格式的报表供财务对账使用。月度供应商需要更新货品的供应品类和对应价格,并且后续有供应商比价的需求。而目前市面上的一些ERP软件,比如用友、金蝶、管家婆等等,其功能都过于繁杂,不利于餐厅管理人员使用,故委托本团队开发一套具有针对性的仓库管理系统,主要功能在于食材的进库、出库、报价、报表导出的管理。
2系统设计
本系统使用了ASP.NET MVC5后端架构,运行在IIS服务器上。前端主要使用Bootstrap框架实现用户界面。数据库使用SQL Server 2008R2,运行在阿里云服务器上。
系统设计:系统除了用户表以外,核心业务表为产品表、供应商表、报价表、品类表、进出记录表,具体列设计可参考图1。为了提高数据库性能,我们删除了大部分外键约束,对象直接关系通过EntityFramework代码在实体类里面体现。
整个系统使用流程设计如下:
1)报价单的导入:根据用户的使用习惯,从便利用户的角度出发设计,用户利用Excel导入供应商报价单,这里可能会分别产生产品(食材)表、品类表、供应商表、报价表几个表的数据,但最终用户比较关心的是报价表里面的数据。用户不需要关心产品的ID信息,这个在导人的Excel里面也没有体现,同一个供应商下面相同名称的产品会拥有相同的产品ID;
2)入库:用户安装供应商供货的Excel进行导人,实际的供货价格可以跟报价有所下降,但不能超出月度报价。也支持单条记录人工录入,但从实际应用场景来看,单条数据录入的使用几率不大;
3)出库:用户在Web管理界面批量选择需要出库的食材,同一批出库的食材可以来自不同的供应商,不同的进货日期。出库时货品数量安装先进先出的原则进行减扣,优先消耗较早的食材;
4)月度报表:每月底,导出本月的进出仓记录,供财务部门核对以及部门进货规划使用。
3系统特色
本系统在前后端设计领域都有所创新。前端方面,主要是管理后端类型的页面,原则上是有不少现成的uI框架可以直接套用,比如本团队之前一直在使用的AdminLTE。但这些框架一般体积都比较大,这样的弊端是页面首次加载时间较长。为了解决这个问题,我们基于Bootstrap自己写了一套前端皮肤,效果见图2。配合我们的后端程序,可以做到类似C/S程序的ComboBox组件,在下拉菜单里实现输入选项模糊查询的功能,这个功能目前在B/S系统里面都比较少见,但是对用户体验有较大的提升。
后端框架设计方面,由于EntityFramework已经提供了非常便利的上下文(DbContext)类供数据库操作使用了,能够覆盖大部分的业务场景。唯一不便的就是每个数据表或者视图的带条件分页查询,为此,我们设计了一个通用的DAO类,把实体类作为泛型参数继承一下就可以使用,里面包含了通用的分页函数。而且借助Lambda表达式,我们目前做到了后端零SQL语句,所有数据库操作都通过实体类而不是无法进行语法校验的字符串SQL语句。这样带来的好处是,万一系统进行升级,数据库结构发生改变,Lambda表达式也会做出相应的校验,排除了大部分结构升级带来的代码隐患。
4总结与展望
系统刚投入使用不久,由于设计前期投入了大量的调研工作,历时一年进行定制开发,用户表示使用过程流畅舒适,系统功能实用,界面虽算不上华丽,但也算是整洁干净,可见我们在减少用户操作、优化用户体验方面的努力没有白费。
未来,该系统还计划加入供应商横向比价、二维码扫描进出库、食材跟踪等功能。从技术角度来看都是可以实现的,唯一需要考虑的就是项目进度的时间安排而已。