.NET 8来了,那就开发一套基于.NET 8的快速开发框架吧,就叫Simple
.NET 8来了,开发一套基于.NET 8的快速开发框架吧,就叫 Simple 点我Star
框架由来
为啥有了那么多开发框架,还得非要再搞个呢,大家都知道很多快速开发框架,啥ABP 啥水果啥的,怎么评价他们呢,就是一个字,叼!。
可是作为一个打工人,还不是公司用啥我用啥,公司不用ABP,你也不能老新建个项目就上ABP,上各种Orm吧,并且用ABP类的框架,还是需要些学习时间的,这些框架各种约定,各种快捷Api,各种一键生成了啥啥啥,好用吧,可是一但你公司不能用这些框架,你是不是抓瞎了,之前遇到个只用ABP的新同事,进公司要求只能用基于ASP.Net Core的框架和指定的一些类库,要他开发个文件上传的模块,用于客户服务器打开网页上传下数据库备份之类的文件到公司备份服务器做异地备份,硬是边看文档边搞了,干了2个周,说白了已经不知道ASP.Net Core是咋玩的了。
框架特点
由此我萌发了写个快速开发的框架,他需要有这些特点:
- 开发的框架基于 .NET 8 各种特性啥的尽量少,但是尽量方便点,比如实现自动注入
- 除非很需要,框架本身尽量少引用第三方库,但是又要方便后期添加需要用到的第三方库
- 需要有基本的授权、鉴权,免得每次都要去写这些通用的东西
- 需要实现一套 CRUD 实现,让大量curd解放,能快速生成,同时能方便使用代码生成器生成这一套东西
- 需要实现一套后台管理的前端,并实现基础页面,如登录、系统管理相关页面
规划
根据以上构想,做了一些规划:
- 使用 NLog 做日志库
- 使用 Redis 库 StackExchange.Redis
- 使用 Json 库 Newtonsoft.Json
- 使用 LitDb 轻量数据库做应用存储库
- 使用 MediatR 做应用内事件分发库
- 使用 EF Core做默认 Orm
- 使用 FluentScheduler 做定时任务模块
- 使用多Controller项目模块,支持让各自的api模块使用独立项目,比如AdminController使用一个项目,其他的又分别可以使用自己的项目
- 支持多数据库结构,可以让不同的业务范围使用不同的数据库,比如系统管理模块使用MSSQL DB1,业务模块 使用Mysql DB2
- 使用 Razor 做模板生成器引擎

话不多说,上图吧
添加基础库 Simple.Core 添加基础库 Simple.Core
基础库主要包含一些帮助类,用于方便开发的,和其他框架大同小异

Web项目扩展库 Simple.Core.Web

主要实现:
应用模块基类 SimpleModule,继承此模块基类可分模块开发,分模块按需注册、配置管道,配置模块初始化
自动注入,自动扫描标注了自动注入的任何类和实现,不包含一对多实现
鉴权基类控制器 AppAuthController
Curd控制器 AppCurdController
应用事件分发管理 AppDomainEventDispatcher
简单主机 SimpleHost ,该类用于一键启动按默认配置好服务的 web主机、控制台主机
其他web类,jwt相关,异常和鉴权相关
主机扩展类 HostServiceExtension 里面包含各种服务注册、获取,模块注册,权限自动生成的方法
EFCore 扩展库 Simple.EntityFrameworkCore

主要实现:
DbContext基类 AppDbContext
Curd 实现类 BaseCurdService
Ef日志记录 EFLoggerFactory
代码生成器 Simple.Generator
基于Razor 模板引擎类RazorLight的封装

定时任务 Simple.Job
基于 FluentScheduler 封装的自动注册任务,实现任务自动注册,配置基类用于可使每个任务能单独配置执行调度器

以上就是整个框架的封装,够简单吧,是不是感觉啥都没有用,就这么点东西已经完成了我上面构想的支撑!
下面大家看下admin模块和common模块,分别都能实现自动注入、定时任务、自动生成各自的数据库及数据初始化、领域事件处理,顺带说下,不管是控制台应用的主机还是webapi的主机,里面的模块都可使用构造函数注入哦

看admin控制器项目及主机启动,后面加业务控制器啥的,直接新建项目就行,控制台主机也自动支持了自动注入啥的,开发服务啊啥的都可以重复使用上面Applications下的任意实现
WebHost 主机项目

启动 WebHost 主机

看控制台项目

启动控制台主机

对了,注意配置文件的开发和发布隔离哦


好了,用最简单的东西实现了大多数项目业务都能搞定的框架了吧,如果对你有用,记得 点我Star 哦,初步版本已提交,有时间会持续优化,代码生成器还有一丢丢没搞玩,其他都差不多了,需要的看代码去吧。
.NET 8来了,那就开发一套基于.NET 8的快速开发框架吧,就叫Simple的更多相关文章
- ABP开发框架前后端开发系列---(14)基于Winform的ABP快速开发框架
前面介绍了很多ABP系列的文章,一步一步的把我们日常开发中涉及到的Web API服务构建.登录日志和操作审计日志.字典管理模块.省份城市的信息维护.权限管理模块中的组织机构.用户.角色.权限.菜单等内 ...
- SpringCloud微服务实战——搭建企业级开发框架(四十六):【移动开发】整合uni-app搭建移动端快速开发框架-环境搭建
近年来uni-app发展势头迅猛,只要会vue.js,就可以开发一套代码,发布移动应用到iOS.Android.Web(响应式).以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/ ...
- 对爱奇艺PC Web主站来说,良好的SEO能够帮助其获得更多的搜索流量,因而页面上一些非常重要的内容仍然需要依靠服务端进行渲染,由于另外开发一套基于Node的SSR后台成本较高,而乐趣(基于java和velocity模板引擎)平台作为渲染系统已经十分成熟且运行稳定,在充分试验后,我们决定在Uniqy中使用服务端同步与客户端浏览器异步二次渲染相结合的方式,结合Vue2.0提供的 slot插槽机制,很
https://mp.weixin.qq.com/s/eB20BoqzENO_oNk8eDg4Eg 干货|爱奇艺PC Web新框架实践 原创: 前端研发团队 爱奇艺技术产品团队 昨天
- SpringCloud微服务实战——搭建企业级开发框架(四十七):【移动开发】整合uni-app搭建移动端快速开发框架-添加Axios并实现登录功能
uni-app自带uni.request用于网络请求,因为我们需要自定义拦截器等功能,也是为了和我们后台管理保持统一,这里我们使用比较流行且功能更强大的axios来实现网络请求. Axios ...
- SpringCloud微服务实战——搭建企业级开发框架(四十八):【移动开发】整合uni-app搭建移动端快速开发框架-使用第三方UI框架
uni-app默认使用uni-ui全端兼容的.高性能UI框架,在我们开发过程中可以满足大部分的需求了,并且如果是为了兼容性,还是强烈建议使用uni-ui作为UI框架使用. 如果作为初创公司,自 ...
- Wizard Framework:一个自己开发的基于Windows Forms的向导开发框架
最近因项目需要,我自己设计开发了一个基于Windows Forms的向导开发框架,目前我已经将其开源,并发布了一个NuGet安装包.比较囧的一件事是,当我发布了NuGet安装包以后,发现原来已经有一个 ...
- 基于SpringBoot+Mybatis+AntDesign快速开发平台,Jeecg-Boot 1.1 版本发布
Jeecg-Boot 1.1 版本发布,初成长稳定版本 导读 平台首页UI升级,精美的首页支持多模式 提供4套代码生成器模板(支持单表.一对多) 集成Excel简易工具类,支持单表.一对多导入 ...
- SNF开发平台WinForm之四-开发-主细表管理页面-SNF快速开发平台3.3-Spring.Net.Framework
4.1运行效果: 4.2开发实现: 4.2.1 有了第一个程序的开发,代码生成器的配置应该是没有问题了,我们只要在对应的数据库中创建我们需要的表结构就可以了,如下: 主表结构如下: ...
- SNF开发平台WinForm之二-开发-单表表单管理页面-SNF快速开发平台3.3-Spring.Net.Framework
2.1运行效果: 2.2开发实现: 2.2.1 这个开发与第一个开发操作步骤是一致的,不同之处就是在生成完代码之后,留下如下圈红程序,其它删除. 第一个开发地址:开发-单表表格编辑管理页面 http: ...
- 移动APP为什么要开发两套Android和IOS-桥接模式
一.前言 现在用H5开发个 web app 多么方便,兼容两大系统Andriod和IOS.但是为什么许多公司还要开发原生的APP?开发原生的APP就需要开发两套一套运行在Andriod系统的,一套运行 ...
随机推荐
- Centos安装 Apache Benchmark
检查依赖包是否安装 1 rpm -qa|grep apr-util 2 3 rpm -qa|grep yum-utils 输出信息: 1 apr-util-1.5.2-6.el7.x86_64 2 y ...
- 一文搞懂TCP的三次握手和四次挥手
目录 1.三次握手 2.四次挥手 3.11种状态名词解析 TCP的三次握手和四次挥手实质就是TCP通信的连接和断开. 三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所 ...
- Java学习之进制之间的转换
import java.util.*; public class Jinzhi { public static void main(String[] args) { /** * 总结: * 二进制转换 ...
- 当开源项目 Issue 遇到了 DevChat
目录 1. 概述 2. Bug 分析与复现 3. Bug 定位与修复 4. 代码测试 5. 文档更新 6. 提交 Commit 7. 总结 1. 概述 没错,又有人给 GoPool 项目提 issue ...
- 一文弄懂TypeScript中的混合
1.前言 由于TypeScrip中的类不支持多继承,所以引入了混合(Mixin)的特性,可以间接实现继承的效果. 2.正文 // 声明一个汽车类Vehicle,它有drive方法 class Vehi ...
- 使用Vue3+elementPlus的Tree组件实现一个拖拽文件夹管理
目录 1.前言 2.分析 3. 实现 4.踩坑 4.1.拖拽辅助线的坑 4.2.数据的坑 4.3.限制拖拽 4.4.样式调整 1.前言 最近在做一个文件夹管理的功能,要实现一个树状的文件夹面板.里面包 ...
- 6. 用Rust手把手编写一个wmproxy(代理,内网穿透等), 通讯协议源码解读篇
用Rust手把手编写一个wmproxy(代理,内网穿透等), 通讯协议源码解读篇 项目 ++wmproxy++ gite: https://gitee.com/tickbh/wmproxy githu ...
- ProcessingJS
ProcessingJS 图形 rect(x, y, w, h)(在新窗口中打开) ellipse(x, y, w, h) triangle(x1, y1, x2, y2, x3, y3) line( ...
- frida动态插桩初探
前言 近期碰到了分析app的需求,就学习了一下 frida的动态插桩技术.frida是一款轻量级HOOK框架,可用于多平台上,例如android.windows.ios等.frida分为两部分,服务端 ...
- [ABC208E] Digit Products 题解
Digit Products 题目大意 求有多少个不大于 \(n\) 的正整数,使得该正整数各位乘积不大于 \(k\). 思路分析 观察数据范围,首先考虑数位 DP. 考虑设计记忆化搜索函数 dfs( ...