委托事件反射

ADO和EF MVC

WinForm(膳御云台 2022.12-2023.5)

主要模块

构建WIn Form应用程序搭建了三层,并且将项目分为了如下几个模块:

1、会员管理模块

会员管理模块负责收集和管理会员信息,包括会员的消费记录和会员档案信息。

2、菜品类别模块

菜品类别模块管理菜品信息,包括菜品添加和删除,以及菜品分类。

3、库存管理模块

库存管理模块管理菜品库存总数和日期管理,还负责菜品的采购退货,避免菜品缺货或品质不达标。

4、订单管理模块

订单管理模块负责处理顾客的预定、点单、保存订单记录和历史订单查询。

5、财务管理模块

财务管理模块负责处理用户的结账、记录人员场地的开支、营销开支,制作每月报表和导出数据。

6、营销管理模块

营销管理模块根据市场情况和用户的历史消费记录制定营销计划,如优惠券、会员积分和会员促销活动。

我负责的模块

会员管理模块、库存管理模块、订单管理模块

应用到的知识点

  1. 窗体传值

    窗体传值简单来说就是拥有数据的窗体使用事件调用需要数据窗体的SetValue函数,将数据传给需要数据的窗体。比如说在顾客在加菜时,使用窗体传值将加菜窗体的详细信息传输到原本菜单的AddValue方法中完成商品数量、价格的计算。

  2. 窗体设计

    Visual Studio原本的空间组成的界面并不美观,因此采用第三方DevExpress进行窗体设计。熟练掌握imageList、menuStrip、comboBox和tabPages等控件的使用。

  3. 事件

    本项目中事件主要应用于窗体传值、异步事件处理和自定义事件:

    异步事件处理主要时避免加载商品列表或者导出大型报表时的UI冻结,提升用户体验。

    自定义事件,比如说在库存不足的时候触发警报事件提醒进货。

  4. 用户交互界面

    控件状态管理:在库存不足的时候禁用相关的购买按钮。

    弹出窗口和对话框管理:显示对话框以确认或提醒用户的操作,比如在提交订单的时候弹出提醒窗口。

  5. 线程

    后台工作线程:负责异步读取数据库的内容。 比如点击历史订单窗口,会自动创建后台线程读取数据库数据。

  6. 资源管理

    图片和图标管理:使用图像控件如imageList,存储餐厅品牌的商标、图片和菜品的实物图来装饰整个图形界面和展示菜品图片。

  7. 错误处理

    使用try-catch-finally来捕捉处理可能出现的异常,并确保资源的正确释放。

    自定义错误信息以保证用户更好的体验,如图片上传失败的时候提示自定义错误信息。

  8. 打印和报表

    提供打印预览效果,让用户在实际打印报表之前查看打印效和格式.

    使用printDocument类打印报表。

    报表生成和展示,生成月度销售报表\利润报表和库存报表,在系统中展示给客户.

  9. 性能优化

    内存优化:管理应用程序的内存使用,避免内存泄露、及时释放不再使用的资源。

    资源加载优化:优化资源加载速度,实现懒加载。比如只有用户点击详细菜品信息时才会展示菜品的所有实物图片。

项目技术实现

使用WinForm技术搭建三层实现需求,数据库使用SqlLite

为保证用户体验,使用DevExpress优化图形界面,使其看起来更美观、进行自定义错误处理,使用户的使用难度降低。

为用户提供模糊查询查找商品。

采用NLog日志框架,保证第一时间解决用户的问题。

为保证数据的一致性和窗体数据的连续性,使用窗体传值中的方法传值提升用户体验。

难点和解决方案

会员登录密码采用明文管理并不安全,本项目采用MD5进行加密存储。

使用WinForm的printDocument打印报表并不能很好地满足需求,因此此报表地的导出采用NPOI,支持多种主流格式,如excel。

CMS(智链教育 2023.6-2023.12)

主要模块

  1. 用户管理模块:

    用户注册与登录:支持学生、教师、管理员等不同角色的注册与登录,支持社交媒体登录。

    用户角色与权限:定义不同用户角色(如学生、教师、管理员),并配置权限(如查看课程、提交作业、管理内容)。

    用户信息管理:允许用户查看和更新个人信息,包括联系信息、头像、密码等。

    账户安全:实现密码重置、账户锁定、登录记录等安全功能。

  2. 课程管理模块:

    课程创建与编辑:教师和管理员可以创建和编辑课程信息,包括课程标题、描述、学习目标、教材等。

    课程分类与标签:对课程进行分类和打标签,方便用户查找和过滤。

    课程安排:设置课程的时间安排、学期安排和课程周期。

  3. 学习管理模块:

    课程注册与选课:学生可以浏览课程并进行注册或选课。

    学习进度跟踪:跟踪学生的学习进度,包括课程完成情况、作业提交情况等。

    在线学习:提供在线学习功能,如视频课程、互动练习、在线测验等。

    课程评价与反馈:学生可以对课程进行评价,教师可以查看和回复反馈。

  4. 作业与测验模块:

    作业提交:允许学生在线提交作业,支持文件上传和文本输入。

    作业评分与反馈:教师可以对作业进行评分并提供反馈,学生可以查看评分和反馈。

    在线测验:创建和管理在线测验,自动评分并记录结果。

    测验分析:生成测验结果报告和统计数据,以分析学生的学习效果。

  5. 资源管理模块:

    教材和参考资料:上传和管理教材、课件、参考书籍等资源。

    多媒体资源:管理视频、音频、图像等多媒体资源。

    资源共享:允许教师和学生共享资源,设置访问权限。

  6. 论坛与讨论模块:

    课程讨论区:为每门课程提供讨论区,供学生和教师交流和讨论问题。

    问答系统:允许学生提出问题,教师或其他学生可以回答。

    公告与通知:发布课程相关的公告和通知,及时传达重要信息。

  7. 统计与报表模块

    学习数据分析:分析学生的学习数据,如完成率、成绩分布等。

    课程报表:生成课程相关的统计报表,如课程注册情况、评价分析等。

    财务报表:如果涉及收费课程,提供财务报表,如学费收入、退款记录等。

  8. 系统管理模块

    用户管理:管理用户账户、角色和权限,进行用户数据维护。

    内容管理:管理网站内容,如公告、新闻、博客等。

    系统配置:设置系统参数,如课程设置、通知设置、邮件设置等。

    数据备份与恢复:定期备份系统数据,支持数据恢复操作。

  9. 通知与消息模块

    系统通知:向用户发送系统通知和重要信息。

    消息中心:提供用户之间的消息功能,支持即时通讯。

    邮件通知:发送电子邮件通知,如课程更新、作业截止提醒等。

  10. SEO模块

    关键词管理:允许设置和管理页面的关键词,以优化搜索引擎排名。

    Meta 标签设置:支持设置页面的标题、描述、关键词等Meta标签。

    站点地图生成:自动生成XML站点地图,帮助搜索引擎索引网站内容。

    SEO 分析工具:集成SEO分析工具,提供页面优化建议和性能报告。

    SEO 报告:生成SEO相关的分析报告和统计数据。

  11. 多语言模块

    语言切换:支持用户在前端界面选择不同的语言。

    语言管理:管理员可以添加、删除或修改支持的语言。

    多语言用户界面:确保用户界面在不同语言下的一致性和可用性。

我负责的模块

用户管理模块、论坛与讨论模块、作业和测验模块、资源管理模块、通知与消息模块

知识点管理

本项目采用三层模式(仓储管理层、服务层、用户交互层)、SQLServer、RBAC、AutoMapper、Autofac、Filter、Razor视图、文件上传和下载、依赖注入、中间件、Linq、Quartz.net、Axios、EFCore、NLog、工作单元模式、Dto、HTTP、MediatR、JWT、FFmpeg等

项目技术实现

使用三层架构进行开发有很多好处,如分离关注点:避免将数据访问、业务逻辑和用户界面揉在一起,可以降低耦合度并且使代码地结构更加清晰。

使用EF Core这个ORM框架可以使用Linq语句,由EF Core转换成Sql语句简化数据库操作,并且EF Core还支持数据库迁移功能,意味着可以使用C#语言完成整套数据库操作,能够极大提升开发效率。

使用Autofac依赖注入框架,引入容器管理对象,不需要手动创建对象,提升开发效率。

使用NLog日志框架,记录完整日志,以便于后期维护。

使用Dto和Auto Mapper映射对齐颗粒度,既可以达到不传输无用地数据,又可以给数据瘦身减缓数据传输的压力。

使用Filter实现日志的统一记录、实现工作单元模式封装事务将多个数据库操作置于一个事务里实现数据库的一致性和正确性。

使用Quartz.net定时框架实现月底实现月度流水报表的处理、收支情况分析等操作。

使用Axios发送HTTP请求实现了数据的异步传输。

文件上传和下载(IFormFile)实现报表的下载。

使用JWT完成用户身份验证和功能使用授权。

使用RBAC-基于角色的访问控制实现权限的管理。

难点和解决方案

  1. 性能优化

    • 难点:随着用户数量的增加,必然伴随着性能瓶颈。
    • 解决方案:使用缓存策略,使用Redis进行数据缓存、优化数据库查询。
  2. 安全性问题

    • 难点:网站用户的数据非常重要,务必保证数据安全。可能面临SQL注入、XSS攻击、CSRF攻击等安全威胁。
    • 解决方案:使用参数化查询防止SQL注入;对用户的输入进行过滤和验证防止XSS攻击;抛弃Cookie使用JWT验证登录。
  3. 敏感词过滤

    • 难点:在上课时间点课堂讨论是高并发场景,数据库查询压力瞬时变大,会加重数据库负载导致响应时间加长,不利于用户体验。
    • 解决方案:将敏感词加载到内存缓存中,这样在检查敏感词就可以直接在内存中进行,减少数据库访问,提升用户体验。
  4. 视频处理

    • 难点:视频文件通常会很大,上传和下载的时候会占用大量带宽。并且不同浏览器和移动设备支持的视频格式也有差异,需要保证能够在绝大多数设备上正常播放并且视频文件体积也不会很大。用户上传的视频的转码和存储可能会造成较大负载,影响服务器性能。
    • 解决方案:使用设备广泛支持并且性能方面也不错的H.264视频编码格式,在减小视频文件体积的同时保持较高的视频清晰度。采用分布式存储单独储存视频文件以保证于用户进行交互的业务服务器不会受到文件上传的影响。采用FFmpeg实现视频转码服务,实现高效的转码。
  5. 邮件处理

    • 难点:如何防止邮件被标记为垃圾邮件、如何保证邮件内容的安全性防止被第三方拦截、大量发送邮件可能会导致邮件服务器过载或延迟,影响邮件的及时送达。
    • 解决方案:使用成熟的邮件服务提供商。发送邮件队列管理系统(Redis)来处理大规模发送而任务,确保每个任务都能被及时处理送达。
  6. 图片处理

    • 难点:大量图片的存储和处理会对服务器造成空间压力和性能压力,影响服务器性能。图片的使用要比视频频繁的多,因此图片的压缩、上传、下载等操作会极大影响服务器的性能,尤其是在高并发的场景下。
    • 解决方案:和视频处理一样,使用分布式存储将图片文件处理分散到多个服务器上,减轻单个服务器的负担。并采用缓存策略,如内存缓存或者分布式缓存(Redis),将常用的图片放入缓存里减少对数据库的访问,加快图片处理速度。对图片的上传和处理采用队列管理,避免并发操作使数据库数据出现错误,对图片的进行压缩,减小图片的体积,降低传输的资源消耗。
  7. 多用户协作

    • 难点:在多用户环境下,内容的并发编辑和权限管理比较复杂。
    • 解决方案:使用乐观锁,权限管理使用RBAC保证高效处理权限问题。

WebApi + Vue(颐丰人力 2024.2-2024.8)

主要模块

  1. 登录模块

    用户认证:提供员工和管理员的登录功能,支持使用用户名和密码进行身份验证。

    多重身份支持:支持不同角色(如普通员工、部门经理、管理员等)的登录,并根据角色分配相应的权限。

    安全措施

    • 加密存储:密码应使用加密算法(如 bcrypt)进行加密存储,确保用户数据的安全性。
    • 验证码:可选地加入验证码功能,防止恶意登录尝试。
    • 账户锁定:在连续多次登录失败后,账户会暂时锁定一段时间,以防止暴力破解。

    忘记密码:提供忘记密码功能,用户可以通过注册邮箱或手机号找回密码,支持发送重置密码链接或验证码。

    注销功能:用户可以随时主动注销登录状态,确保账户安全。

    登录日志:记录每次登录的时间、IP 地址、设备信息等,用于安全审计和追踪。

  2. 用户管理模块:

    用户注册和登录:支持员工和管理员的注册、登录及身份验证。

    权限管理:基于角色的权限分配,如管理员、普通员工、部门经理等。

    用户信息管理:员工的个人信息管理,支持查看和更新个人资料。

  3. 员工档案管理模块:

    员工信息维护:管理员工的基本信息,如姓名、工号、职位、部门、联系方式等。

    历史档案管理:保存员工的工作经历、教育背景、培训记录等历史档案。

    员工状态管理:管理员工的入职、在职、离职、休假等状态。

  4. 招聘管理模块:

    招聘需求发布:各部门可提交招聘需求,管理员审核后发布招聘信息。

    简历管理:接收、筛选应聘者简历,支持简历的分类、筛选、搜索等操作。

    面试安排:组织面试流程,安排面试时间和面试官,并记录面试结果。

    录用管理:记录应聘者的录用情况,自动生成入职流程。

  5. 考勤管理模块:

    考勤打卡:支持员工日常打卡、请假申请和加班记录。

    考勤记录管理:查看、统计和导出员工的考勤数据,包括迟到、早退、缺勤等情况。

    休假管理:员工请假申请审批流程及休假天数管理。

  6. 薪酬管理模块:

    薪资计算:根据员工的考勤、绩效、加班等数据自动计算月度薪资。

    工资单管理:生成和发送员工工资单,支持工资单的查询和下载。

    奖金和补贴管理:管理各类奖金、补贴的发放情况,记录发放历史。

  7. 绩效管理模块:

    绩效目标设定:根据员工职位和部门设定绩效目标。

    绩效考核:定期对员工的工作表现进行评估,记录考核结果。

    绩效反馈:员工可查看自己的考核结果,并与上级进行反馈沟通。

  8. 培训与发展模块

    培训计划管理:制定并发布企业内部的培训计划和课程。

    培训报名与记录:员工可以在线报名参加培训,系统记录培训参与情况。

    培训考核:对培训效果进行考核和反馈。

  9. 组织架构管理模块

    部门管理:创建和管理公司内部的部门结构,支持部门增删改查。

    职位管理:定义各部门的职位信息及对应的职责和要求。

    组织图展示:可视化展示公司的组织架构和人员分布情况。

  10. 合同管理模块

    劳动合同管理:创建、查看和管理员工的劳动合同,支持合同的续签和终止。

    合同档案:存储和管理员工签署的合同文档,支持查询和下载。

  11. 系统设置与维护模块

    基础数据配置:配置系统中的基础数据,如职位列表、工作地点、薪酬等级等。

    日志管理:记录系统操作日志,便于审计和问题排查。

    数据备份与恢复:定期备份系统数据,支持数据恢复操作。

  12. 报表与统计模块

    员工报表:生成各类员工相关的报表,如员工信息汇总、离职率统计等。

    薪资报表:生成薪资统计报表,如工资支出汇总、部门薪资对比等。

    绩效报表:生成绩效考核相关的统计报表,帮助管理层做出决策。

  13. 通知与公告模块

    公告发布:管理员可以发布公司公告,员工在登录后可以查看。

    通知管理:发送重要通知到指定员工或部门,确保信息传达。

  14. 消息提醒模块

    系统提醒:如考勤异常、合同到期、生日提醒等,发送提醒通知给相关人员。

    邮件和短信通知:重要信息通过邮件或短信发送给员工,确保信息传达。

  15. 自助服务模块

    信息查询:员工可以自助查询个人的考勤、工资、绩效等信息。

    在线申请:员工可以在线提交请假、调岗、离职等申请。

我负责的模块

登录模块、用户管理模块、考勤管理模块、培训发展模块、合同管理模块、报表统计模块、消息提醒模块。

知识点管理

本项目采用三层模式(仓储管理层、服务层、用户交互层)、SQLServer、Vue CLi、Vue Router、Vuex、SPA、RBAC、AutoMapper、Autofac、Filter、文件上传和下载、JWT、数据塑形、依赖注入、中间件、Linq、Quartz.net、Axios、EFCore、NLog、工作单元模式、Dto、HTTP、FFmpeg、CORS、Element Plus、CaptchaGen等

项目技术实现

前端使用Vue全家桶(Vue CLi、Vue Router、Vuex)构建前端的SPA(单页应用程序),不仅能减少服务器负载还能提升用户体验。

后端则使用.Net Core Web Api开发采用Restful风格开发。

使用RBAC-基于角色的控制访问管理权限。

使用Auto Mapper、Dto以及数据塑形实现不同层次之间精细化的数据传输,不传输不接收无用数据,减轻传输负担。

使用Autofac创建容器实现依赖注入。

使用Filter完成统一的日志记录、实现工作单元模式进行事务提交、接收数据前的数据校验等。

使用Axios完成异步操作实现不刷新页面的更新数据操作。

使用EF Core这一ORM框架完成数据库模型创建和管理。

使用CORS技术实现跨域资源共享。

使用JWT-JSON Web Token实现无状态的、安全的登录。

使用Element Plus第三方前端库完成前端的页面搭建。

难点和技术实现

  1. 安全性问题
    • 难点:本网站只服务于本公司员工,为防止外来用户登录,实行严格的安全措施。
    • 解决方案:登录模块使用CaptchaGen生成验证码,防止恶意登录尝试;加入账户锁定功能,防止暴力破解:登录成功以后一段时间内使用JWT身份验证。
  2. API设计与Readme文档
    • 难点:设计风格一致、命名规范以及功能齐全的API接口。
    • 解决方案:采用Restful风格的命名规范、使用Swagger、Apifox进行API功能测试。
  3. 团队协作和代码版本管理
    • 难点:在团队开发过程中保证责任划分、版本质量和一致性。
    • 解决方案:使用Git进行版本控制,保证不出版本不一致问题;实施代码审查,把控代码质量。
  4. 性能优化
    • 难点:SPA应用第一次加载时间略长,对于用户的体验不好。
    • 解决方案:采用懒加载,代码分割等Vue特性;实施缓存策略存储经常使用的组件。
  5. API权限的过滤
    • 难点:随着项目的扩展,API方法的数量可能会急剧增加,如果每次都要管理员手动添加很可能会导致多加或者遗漏的问题。
    • 解决方案:在项目规划初期就划分好API的权限并整理为Excel,可以使用EP Plus导入到数据库中,在创建API的过程中自动读取数据库内容,完成API权限的自动添加。
  6. 数据库优化
    • 难点:设计高效的数据库模式。
    • 解决方案:使用索引优化查询;定期检测和优化数据库性能。