当前位置: 首页 > news >正文

C# Winform通用开发框架,支持多语言,多数据库,自动更新,模块化,可用其开发任意CS端系统

C# Winform通用开发框架,支持多语言,多数据库,自动更新,模块化,可用其开发任意CS端系统,非常适合需要快速搭建项目的团队或个人使用。

框架概述

LCIT.CPS 是一个基于 C# Winform 的通用开发框架,支持多语言、多数据库、自动更新和模块化架构。该框架采用分层架构设计,业务逻辑层(BLL)作为系统的核心处理层,负责业务规则的实现和数据处理流程的编排。

业务逻辑层架构设计

1. 基础接口设计

框架定义了统一的业务逻辑基础接口IBaseBLL,为所有业务逻辑类提供标准化操作:

public interface IBaseBLL<TEntity, TPrimaryKey> where TEntity : class, IBaseEntity<TPrimaryKey>, new() { // 基础CRUD操作 TEntity GetEntity(TPrimaryKey id); Task<TEntity> GetEntityAsync(TPrimaryKey id); List<TEntity> GetEntityList(string whereSQL); // 分页查询 PagedTable GetTableOnPage(string whereSQL, int pageIndex, int pageSize, string orderBy = null, string orderType = null); PagedList<TEntity> GetListOnPage(string whereSQL, int pageIndex, int pageSize, string orderBy = null, string orderType = null); // 数据操作 bool CreateEntity(TEntity entity); bool UpdateEntity(TEntity entity); bool DeleteEntity(TPrimaryKey id); }

2. 仓储工厂模式

框架采用仓储工厂模式RepositoryFactory实现数据访问的统一管理:

public class LabelParameterBLL : RepositoryFactory<LabelParameter, long>, ILabelParameterBLL { // 继承基础CRUD功能,可扩展特定业务逻辑 }

核心功能模块详解

1. 系统管理模块

1.1 用户管理 (UserBLL)

功能描述

  • 用户身份认证和授权管理
  • 用户角色关联管理
  • 权限控制

核心方法

public async Task<Entity.System.Users> LoginAsync(string userCode, string password) { var user = await this.Repository.GetEntityAsync("UserCode", userCode); var appUserManager = new AppUserManager(new AppUserStore()); var verificationResult = appUserManager.PasswordHasher.VerifyHashedPassword(user.Password, password); return verificationResult == PasswordVerificationResult.Success ? user : null; } public async Task CreateUser2RoleAsync(long userId, List<string> list_RoleIds) { using (var dbTransaction = Db.BeginTrans()) { // 删除原有角色关联 Db.Delete<User2Role>("UserId", userId.ToString(), dbTransaction); // 创建新的角色关联 foreach (var roleId in list_RoleIds) { var user2Role = new User2Role { UserId = userId, RoleId = roleId.ToInt64() }; await Db.InsertAsync(user2Role, dbTransaction); } Db.Commit(); } }
1.2 权限管理 (PermissionBLL)

功能描述

  • 菜单权限和操作权限管理
  • 基于角色的权限控制(RBAC)
  • 用户个性化权限设置

核心实现

public async Task<DataTable> GetPermissionsAsync() { var strSQL = @"SELECT sm.Id, sm.ParentId, sm.MenuCode PermissionCode, sm.MenuName PermissionName, 0 PermissionType FROM SYS_Menu sm UNION ALL SELECT smo.Id, smo.MenuId ParentId, smo.OperationCode PermissionCode, smo.OperationName PermissionName, 1 PermissionType FROM SYS_Menu2Operation smo"; return await this.Db.GetTableBySqlAsync(strSQL); }
1.3 菜单管理 (MenuBLL)

功能描述

  • 动态菜单配置
  • 菜单操作权限绑定
  • 菜单层级管理

特色功能

public PagedTable GetMenusOnPage(string menuCode, string menuName, int pageIndex, int pageSize) { var strSQL = @"SELECT m1.Id, m1.MenuName, m1.MenuCode, m1.AssemblyName, m1.NameSpace, m1.ClassName, m1.ParentId, m2.MenuName AS ParentName, m1.Seq, m1.CreatorFullName, m1.CreationTime FROM SYS_MENU m1 LEFT JOIN SYS_MENU m2 ON m1.ParentId = m2.Id WHERE 1=1"; // 动态条件拼接 if (!menuCode.IsNullOrEmpty()) strSQL += $" AND m1.MenuCode='{menuCode}'"; if (!menuName.IsNullOrEmpty()) strSQL += $" AND m1.MenuName='{menuName}'"; return this.Db.GetTableOnPageBySql(strSQL, "Seq", "", pageIndex, pageSize); }

2. 配置管理模块

2.1 标签模板管理 (LabelTemplateBLL)

功能描述

  • 标签模板配置和管理
  • 模板与参数关联管理
  • 支持条形码类型配置

核心业务逻辑

public async Task CreateLabelTemp2ParamAsync(long tempId, List<string> list_ParamIds) { try { using (var dbTransaction = Db.BeginTrans()) { // 事务处理:先删除后插入 Db.Delete<LabelTemplate2Param>("TemplateId", tempId.ToString(), dbTransaction); var labelTemplate2Param = new LabelTemplate2Param(); foreach (var paramId in list_ParamIds) { labelTemplate2Param.TemplateId = tempId; labelTemplate2Param.ParameterId = paramId.ToInt64(); if (!await Db.InsertAsync(labelTemplate2Param, dbTransaction)) { throw new Exception("保存失败!"); } } Db.Commit(); } } catch (Exception ex) { Db.Rollback(); throw new Exception(ex.Message + Environment.NewLine + ex.StackTrace); } }
2.2 数据字典管理 (ValueSetBLL)

功能描述

  • 系统数据字典统一管理
  • 支持多级分类
  • 启用/禁用控制

数据操作

public async Task<List<ValueSetCodeDto>> GetValueSetCodeListAsync(string typeCode) { var valueSetCodes = await this.Db.GetListAsync<ValueSetCode>("TypeCode", typeCode); return valueSetCodes.MapToList<ValueSetCode, ValueSetCodeDto>().ToList(); }

3. 版本管理模块 (VersionBLL)

功能描述

  • 系统版本控制
  • 自动更新支持
  • 版本发布管理

核心方法

public async Task<VersionsDto> GetMaxVersionAsync() { var sql = @"SELECT TOP 1 * FROM [dbo].[SYS_Version] ORDER BY VersionNo DESC"; var version = await this.Db.GetEntityBySqlAsync<Versions>(sql); return version.MapTo(new VersionsDto()); }

技术特色与设计模式

1. 异步编程支持

框架全面支持异步操作,提高系统响应能力:

public async Task<bool> UpdateLoginTimeAsync(long userId) { var user = await this.Repository.GetEntityAsync(userId); user.LastLoginTime = DateTime.Now; return await this.Repository.UpdateAsync(user); }

2. 事务管理

采用统一的事务管理机制,确保数据一致性:

using (var dbTransaction = Db.BeginTrans()) { // 多个数据库操作 Db.Delete<...>(...); await Db.InsertAsync(...); // ... Db.Commit(); }

3. DTO模式应用

使用DTO(Data Transfer Object)进行数据传输:

public class LabelParameterDto : BaseEntity<long>, IMayHaveTenant { public int? TenantId { get; set; } public string ParameterCode { get; set; } public string ParameterName { get; set; } public string Remark { get; set; } }

4. 多租户支持

通过IMayHaveTenant接口实现多租户数据隔离:

public interface IMayHaveTenant { int? TenantId { get; set; } }

数据处理流程

1. 标准CRUD流程

用户请求 → 业务逻辑层 → 数据验证 → 事务管理 → 数据访问层 → 数据库操作 → 返回结果

2. 复杂业务处理流程

开始事务 ├── 数据验证 ├── 业务规则检查 ├── 主数据操作 ├── 关联数据操作 └── 提交/回滚事务

扩展性与维护性

1. 模块化设计

  • 各功能模块独立封装
  • 清晰的接口定义
  • 松耦合的组件关系

2. 配置灵活性

  • 支持多数据库(SQL Server、Oracle、SQLite)
  • 可配置的连接管理
  • 动态SQL支持

3. 错误处理机制

  • 统一的异常处理
  • 事务回滚保障
  • 详细的错误日志

总结

LCIT.CPS 业务逻辑层通过精心设计的架构模式和规范的业务流程,为企业级应用开发提供了稳定、高效、可扩展的基础框架。其模块化设计、多租户支持、完善的权限管理和灵活的配置能力,使其能够适应各种复杂的业务场景需求,为快速开发高质量的CS端系统提供了强有力的技术支撑。

C# Winform通用开发框架,支持多语言,多数据库,自动更新,模块化,可用其开发任意CS端系统,非常适合需要快速搭建项目的团队或个人使用。

http://www.jsqmd.com/news/592938/

相关文章:

  • 5步掌握YimMenu:GTA5终极防崩溃菜单完整指南
  • 利用快马平台快速将notepad++笔记构思转化为可交互网页应用原型
  • 卫星姿态轨道控制simulink仿真/姿轨控 卫星姿轨控仿真,基于simulink 自己在国外...
  • uds bootloader stm32 完整方案 iso15765 iso14429 简化学...
  • 一文读懂 Skill 与 MCP 是什么?有什么区别?(附研发各场景 Skill 推荐清单)
  • Amadeus的知识库 | 传统检索不懂语义?大模型知识有限?—— RAG检索增强生成来帮忙!
  • 雷赛HBS86闭环步进驱动方案代码功能说明
  • 抖音批量下载全攻略:一键保存无水印视频,轻松管理海量内容
  • 多页原理图设计救星:用AD端口交叉引用快速定位信号流向(含Ctrl跳转技巧)
  • Windows快捷键冲突终结者:Hotkey Detective 5分钟快速定位秘籍
  • 永磁同步电机2D电磁仿真模型代码功能说明
  • 打卡信奥刷题(3066)用C++实现信奥题 P6877 [JOI 2020 Final] 只不过是长的领带 / Just Long Neckties
  • 新手避坑指南:用RT-Thread Studio和星火一号,5分钟搞定AHT10温湿度采集与阿里云MQTT上传
  • vant-weapp版本迁移检查清单
  • 3个抖音内容管理痛点与开源下载工具的解决方案
  • MTKClient终极指南:解锁联发科设备的完整刷机与逆向工程工具
  • ComfyUI Manager管理工具完全指南:优化工作流与资源配置的实战手册
  • 2026最权威的五大降AI率方案实测分析
  • 基于S7-200PLC的PID模糊控制电子皮带秤自动配料系统设计:梯形图程序详解与接线图、io...
  • 2025届学术党必备的十大降AI率工具推荐
  • 终极MaaYuan自动化助手:5分钟快速部署代号鸢日常任务解放双手方案
  • 可观测日志存储选型 ES Loki ClickHouse
  • m4s-converter:B站缓存视频本地化全解决方案
  • 并联机器人结构优化与多场景应用探索
  • 双横臂悬架硬点匹配:为学习与初入行小伙伴开启的技术之门
  • OpenCore Legacy Patcher终极指南:如何让旧款Mac焕发新生
  • 基于改进蚁群算法的路径规划功能说明
  • 2025届毕业生推荐的五大AI辅助论文平台推荐榜单
  • 龙芯2k0300 - 走马观碑组Gazebo仿真环境搭建
  • 解密ngx_http_proxy_connect_module:正向代理HTTPS的CONNECT魔法