前言
为什么近年来开发框架层出不穷?尽管已有许多优秀的快速开发框架,如 ABP 和其他类似的框架,但是作为一名开发者,我们常需遵循公司的技术选型。即使 ABP 提供了丰富的功能,但如果公司不支持,我们也无法使用。
ABP 类的框架确实有其独特魅力:约定优于配置、快捷 API、一键生成等功能让人感觉瞬间高大上。
记得一位擅长 ABP 的新同事,被安排开发一个简单的文件上传模块,结果花了两周时间才完成,期间不断查阅文档,甚至对 ASP.NET Core 感到陌生。我们意识到,使用熟悉的框架是多么重要。
项目介绍
一个基于.NET 8 和 Entity Framework Core 的快速开发框架,支持多控制器模块、总线事件处理、多数据库连接、多模块开发方式,并具备自动任务注册与发现功能,还内置了代码生成器,力求实现简约高效的设计理念。
项目特点
基于 .NET 8,尽可能减少框架特性,但要足够便捷,例如实现自动依赖注入。
尽量减少对第三方库的依赖,但要便于后期添加所需的第三方库。
包含基本的权限管理和身份验证功能,以减少重复工作。
实现一套 CRUD 功能,使常见操作得以快速生成,并支持通过代码生成器创建这些组件。
提供一套后台管理前端界面,包括登录页和系统管理页面。
集成一些实用工具,以辅助部署或生成项目。
项目规划
框架提供一个简洁高效的开发环境,实现快速开发的同时,保证系统的灵活性和扩展性。
通过支持多数据库、多项目模块以及强大的鉴权机制,使得开发过程更加便捷,同时也方便后期维护和扩展。
日志库:NLog
Redis 客户端:StackExchange.Redis
JSON 库:Newtonsoft.Json
轻量级数据库:LiteDB(用于应用存储)
事件分发库:MediatR
ORM 框架:Entity Framework Core
定时任务库:FluentScheduler
模板生成器引擎:Razor
服务启动工具:winSW
架构设计
多Controller项目模块:支持各自API模块使用独立项目。例如,AdminController 可以作为一个独立项目,其他业务模块也可以各自拥有独立项目。
多数据库支持:允许不同业务范围使用不同的数据库。例如,系统管理模块可以使用 MSSQL DB1,而业务模块可以使用 MySQL DB2。
功能模块
鉴权模块:使用 JWT 进行鉴权标识,后端实现一套功能点权限管理体系,支持对任何需要权限控制的 API 进行权限控制,并可灵活分配给不同角色或用户。
工具集成
代码生成工具:利用 Razor 引擎自动生成 CRUD 相关代码。
部署辅助工具:使用 winSW 搭建服务启动模块,简化部署流程。
项目结构
Simple Framework 项目结构说明,具体如下图所示:
基础库Simple.Core
包含帮助类,用于简化开发工作。
示例:帮助类、工具方法等。
Web项目扩展库Simple.Core.Web
SimpleModule:应用模块基类,便于分模块开发。
自动注入:自动扫描并注入标记了特定属性的类。
AppAuthController:鉴权基类控制器。
AppCurdController:CRUD操作基类控制器。
AppDomainEventDispatcher:应用事件分发管理。
SimpleHost:一键启动默认配置好的 Web 控制台主机。
JWT 相关类:处理 JWT 认证和授权。
异常处理类:处理应用程序中的异常情况。
HostServiceExtension:服务注册、模块注册等扩展方法。
EFCore 扩展库Simple.EntityFrameworkCore
AppDbContext:继承自DbContext 的基类。
BaseCurdService:CRUD操作实现类。
EFLoggerFactory:EF Core 日志记录工厂。
代码生成器Simple.Generator
基于 RazorLight 模板引擎的代码生成工具。
定时任务Simple.Job
基于 FluentScheduler 的定时任务框架,支持任务自动注册和配置。
Admin 和 Common 模块
支持自动注入、定时任务、数据库初始化、领域事件处理等功能。
可在控制台或 WebAPI 应用中使用构造函数注入。
WebHost 和 控制台主机项目
支持快速启动 Web 或控制台应用程序。
AOT 快速部署服务 Simple.RunService
提供 AOT 编译,支持快速部署服务,无需安装额外环境。
前端页面适配
基于 Vue.js 2 和 Element UI 的前端页面实现,包括登录、菜单管理、角色授权等功能。
注意事项
配置文件隔离:开发环境与生产环境的配置文件应分开管理。
项目地址
Gitee:gitee.com/VCodeWork/s…
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。
也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!
优秀是一种习惯,欢迎大家留言学习!