SmallNetCore是采用NET6搭建的一套轻量级后端开发项目,对于中小型企业或者个人项目可以直接使用,项目主要使用的技术栈包括:NetCore、Autofac、Sqlsugar、AutoMapper、Log4、JWT、Swagger等,基础框架功能都已经封装好,对相关技术稍加了解就能开箱即用,项目基本没有冗余代码。
以MVC三层架构为基础的架构体系,整体的架构是每张表对应一个实体类、一个数据访问层的类。业务逻辑层则按照具体的业务进行组装,摒弃了一张表一个业务类的设计。例如下单业务,就会涉及到订单表、用户表、支付表进行组合。
-
表现层
- SmallNetCore.UI
- Controllers 控制器
- appsettings.json 系统配置文件
- log4net.config 日志配置文件
- Program.cs 启动类
- SmallNetCore.UI
-
业务逻辑层
- SmallNetCore.IServices【用于IOC注入,面向接口编程】
- SmallNetCore.Services
- Base 当前层的公用方法,例如基类
-
数据库访问层
- SmallNetCore.IRepository【用于IOC注入,面向接口编程】
- SmallNetCore.Repository
- Base 当前层的公用方法,例如基类
-
实体层
- SmallNetCore.Models
- Base 当前层的公用方法
- Configs 配置集合
- CenterConfigs.cs 动态配置读取
- Consts.cs 常量的配置
- DBModels 数据表实体
- Entitys 公共的实体,例如用户的登录实体,配置链接的实体等
- Enums 枚举集合
- ViewModels Dto相关的实体
- Base 公共的实体,例如一些基类定义
- Request 所有请求的实体
- Response 所有返回的实体
- SmallNetCore.Models
-
其他
-
SmallNetCore.Common【公共方法层】
- ApIInfo Http请求相关
- Convets 各种数据转换
- Encrypt 加密相关
- Serialize 序列化相关
- Utils 其他方法
-
SmallNetCore.Extensions【扩展层】,主要用于一些公用的非业务逻辑层,例如,autofac的注入、automapper的构造等,但是像一些订单类、商品类的业务逻辑还是要放在SmallNetCore.Services层,最好不用弄混了
- AutoMapper AutoMapper相关的配置
- Filter 过滤器配置
- GlobalExceptionsFilter.cs 全局异常捕获
- MyActionFilterAttribute.cs 请求管道跟踪
- ServiceExtensions 服务注册相关扩展
-
SmallNetCore.Remotes【远程服务调用层】,主要用于一些第三方的服务封装,例如微信支付、阿里支付等第三方的服务
-
- 当前项目使用的MySql数据库,会有个初始化的数据结构,脚本Sql如下:
-
数据库库名称:FirstTestDb
DROP TABLE IF EXISTS `role`; CREATE TABLE `role` ( `RoleId` int NOT NULL AUTO_INCREMENT COMMENT '角色ID', `RoleName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '角色名称', PRIMARY KEY (`RoleId`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 36 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '角色表' ROW_FORMAT = Dynamic; DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `Id` int NOT NULL AUTO_INCREMENT COMMENT '用户主键', `UserName` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '用户姓名', `Sex` tinyint(1) NOT NULL DEFAULT 0, PRIMARY KEY (`Id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户表' ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;
-
数据库库名称:SerondTestDb
DROP TABLE IF EXISTS `order`; CREATE TABLE `order` ( `OrderId` int NOT NULL AUTO_INCREMENT COMMENT '主键', `UserId` int NOT NULL COMMENT '用户ID', `ProductId` int NOT NULL COMMENT '商品ID', PRIMARY KEY (`OrderId`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;
-
数据库创建完成之后,进行更换项目的数据库链接,位置:SmallNetCore.UI -> appsettings.json -> MYSQL节点
-
当前数据库完全只是测试数据库,并非必要数据库,正式项目可以替换自己的数据库,甚至更换Mysql,使用其他类型的数据库
-
实体生成,可以使用sqlsugar官方推荐的链接,生成的实体需要包含Tenant特性,如下图,主要是解决当前项目存在多个数据库问题,如果单库可以通过设置默认链接不用设置Tenant特性
[Tenant(MySqlConnEnum.FisrtTestDb)] public class Role { /// <summary> /// 角色Id /// </summary> [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] public int RoleId { get; set; }
-
后期针对数据访问层也会集成到代码生成器里面,这个后期进行完善....
-
项目GitHub请看 https://github.com/chengwenkang/SmallNetCore
-
有问题可以加QQ:445056007