chore:banner添加种子数据
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
## 它是什么?
|
||||
|
||||
YiFramework是一个基于.Net8+Abp.vNext+的后端开源框架
|
||||
YiFramework是一个基于.Net8+Abp.vNext+SqlSugar的DDD领域驱动设计后端开源框架
|
||||
|
||||
中文名称:意框架
|
||||
|
||||
@@ -9,6 +9,11 @@ YiFramework是一个基于.Net8+Abp.vNext+的后端开源框架
|
||||
但是,不仅仅是如此
|
||||
|
||||
## 它的理念
|
||||
谁说Abp复杂?谁说DDD难?打破常规,化繁为简,新人入门,项目二开,最佳方式之一
|
||||
|
||||
> 一百个人,就有一百种DDD,Yi框架不一定是极度严格的DDD,而是站在巨人的肩膀上,经过极多项目的提炼,摸索出一种最佳实践
|
||||
|
||||
|
||||
优雅的进行快速开发,通常,简单程度与优雅程度不可兼得,Yi框架并不一昧的追求极致的解耦,会站在用户使用角度上,在使用难易度进行考虑衡量
|
||||
|
||||
> 一个面向用户的快速开发后端框架
|
||||
@@ -17,37 +22,21 @@ YiFramework是一个基于.Net8+Abp.vNext+的后端开源框架
|
||||
|
||||
## 特点
|
||||
- 面向用户的后端框架,使用简单,适合小型、中型、企业级项目
|
||||
- 项目内置源码,不打包,方便二开
|
||||
- 项目直接内置源码,不打包,非常适合进行二开改造
|
||||
- 内置包含大量通用场景模块
|
||||
- 等等
|
||||
|
||||
## 基础设施简介
|
||||
- Jwt鉴权
|
||||
- 接口级别授权
|
||||
- 对象映射
|
||||
- O/RM
|
||||
- 数据过滤
|
||||
- 多租户
|
||||
- 逻辑删除
|
||||
- 审计日志
|
||||
- 种子数据
|
||||
- 工作单元
|
||||
- 模块化
|
||||
- 动态Api
|
||||
- 属性注入
|
||||
- 自动依赖注入
|
||||
- 当前用户
|
||||
- 仓储
|
||||
- Crud
|
||||
|
||||
以下全部功能可直接使用:
|
||||
|
||||
- [Abp.vNext官网](https://docs.abp.io/zh-Hans/abp/latest/)
|
||||
|
||||
- [SqlSugar官网](https://www.donet5.com/home/doc)
|
||||
|
||||
## 内置模块简介
|
||||
- Rbac权限管理系统
|
||||
- Bbs论坛社区系统
|
||||
|
||||
|
||||
## 业务项目
|
||||
- RABC后台管理系统
|
||||
- BBS社区系统
|
||||
|
||||
> 重复的东西,无需再写一遍,这也是优雅的体现之一
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
# 后端
|
||||
C# Asp.NetCore 8.0
|
||||
- [x] 动态Api:Abp.vNext
|
||||
- [x] 鉴权授权:Jwt
|
||||
- [x] 日志:Serilog
|
||||
- [x] 模块化:Abp.vNext
|
||||
- [x] 依赖注入:Autofac
|
||||
- [x] 对象映射:Mapster
|
||||
- [x] ORM: SqlsugarCore
|
||||
- [x] 多租户:Abp.vNext
|
||||
- [x] 后台任务:Quartz.Net
|
||||
- [x] 本地缓存:Abp.vNext
|
||||
- [x] 分布式缓存:Abp.vNext
|
||||
- [x] 事件总线:Abp.vNext
|
||||
|
||||
# 前端
|
||||
js Vue3.2
|
||||
- [x] 异步请求:axios
|
||||
- [x] 图表:echarts
|
||||
- [x] ui:element-plus
|
||||
- [x] 存储:pinia
|
||||
- [x] 路由:vue-router
|
||||
- [x] 打包:vite
|
||||
|
||||
# 运维
|
||||
- [x] 部署:nginx
|
||||
- [x] CICD:gitlab+Jenkins
|
||||
- [x] Docker:harbor
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
本项目为前后端分离项目,后端需要.Net8环境启动,前端需Node.js环境启动
|
||||
|
||||
推荐下载开发工具:
|
||||
|
||||
- Visual Studio 2022
|
||||
- Visual Studio Core
|
||||
|
||||
|
||||
## 后端
|
||||
vs选中启动项目Yi.Abp.Web模板项目
|
||||

|
||||
|
||||
直接启动即可,无任何其他环境依赖,数据库默认采用`Sqlsite`,缓存默认采用`本地缓存`
|
||||
|
||||
启动后,浏览器将会弹出项目接口地址swagger:
|
||||
|
||||

|
||||
|
||||
> 纳尼?怎么就看到一个测试接口?莫急,由于模块化方式,接口会越来越多,已自动分组至右上角,请点击分组
|
||||
|
||||
恭喜你,已经成功运行后端,是不是很简单?
|
||||
|
||||
> 等等?表结构呢?表数据呢?为什么没有sql文件?在这里,统统不需要,配置文件默认开启CodeFirst可自动建库及表结构,默认开启DataSeed种子数据,自动创建初始化数据
|
||||
|
||||
## 前端
|
||||
对于前端,默认提供两个项目,分别对应后端的BBS与RBAC
|
||||
|
||||
- BBS -> Yi.BBS.Vue3
|
||||
- RBAC -> Yi.RuoYi.Vue3
|
||||
|
||||
可根据需要选择进行启动
|
||||
|
||||
1:还原依赖
|
||||
|
||||
> npm install
|
||||
|
||||
2:启动项目
|
||||
|
||||
> npm run dev
|
||||
|
||||
|
||||
## 配置启动地址:
|
||||
前端:
|
||||

|
||||
后端:
|
||||

|
||||
104
Yi.Doc.Md/01.框架快速开始教程/04.目录结构.md
Normal file
104
Yi.Doc.Md/01.框架快速开始教程/04.目录结构.md
Normal file
@@ -0,0 +1,104 @@
|
||||
好了,相信当你非常容易的启动了项目之后,并看到了页面效果,也感受到它的简易
|
||||
|
||||
废话少说,直接上图:
|
||||

|
||||
|
||||
***感觉和传统的不太一样,怎么这么多类库,感觉很难上手***
|
||||
|
||||
NONONONONO!
|
||||
|
||||
恰恰相反,其实对于使用用户来说我们只关注src中的Yi.Abp即可,如下图:
|
||||
项目模板结构:
|
||||
|
||||
> 懂Abp.vNext的大佬看到目录就会有一股熟悉的味道
|
||||
|
||||
Yi框架并没有直接采用Abp.vNext的模板生成,而是从零进行搭建起来的,但其中的分层结构与Abp.vNext是一致的,只是EntityFramework更换成了SqlSugar
|
||||
|
||||
总体来看分为以下3个部分:
|
||||
- Framework (Yi.Framework框架部分,基础设施)
|
||||
- Module(Yi.Framework提供的内置模块部分,例如Rbac、Bbs)
|
||||
- Src (真正业务进行开发的部分)
|
||||
|
||||
很好,换句话来说,只需要关注Src部分,其他的都以`源代码`的方式,并没有进行打成nuget包,1是为了方便二开,2是为了方便大家学习,3是本来也不复杂
|
||||
|
||||
现在,我们来好好见识下为何如此分层吧~
|
||||
|
||||
说到分层,不得不提这个经典神图
|
||||
|
||||

|
||||
|
||||
这张图就对应着我们的结构
|
||||
|
||||

|
||||
|
||||
这个可能没接触过DDD的不能理解,为什么要这样分层,三层架构不好吗?这样感觉好难,不能理解!且慢,待你看完下面每层的概述,你就不会认为简单,这不比三层架构简单?
|
||||
|
||||
首先,Yi框架的分层非常明确,命名属于严格类型,对于初学者,一眼看破
|
||||
|
||||
简单分为6个类库
|
||||
1. 应用层
|
||||
2. 应用抽象层
|
||||
3. 领域层
|
||||
4. 共享层
|
||||
5. 基础设施Sqlsugar层
|
||||
6. Web层
|
||||
|
||||
我们从下至上讲解:
|
||||
## Doman.Shared 共享层
|
||||
最底层是Doman.Shared,共享层,这里存放各个常量、枚举、不依赖各个模块的通用类:
|
||||
|
||||

|
||||
|
||||
> Doman.Shared,共享层 是一层很简单、不包含业务的模块,让它尽可能简单,有没有感觉像三层架构的Common?
|
||||
|
||||
## Domain 领域层
|
||||
只依赖Doman.Shared的`Domain领域层`
|
||||
|
||||

|
||||
|
||||
你可以选择存放大部分业务到领域层中,我们称这种模式叫做:`重领域层模式`
|
||||
你也可以选择存放大部分业务到它的上一层,Application 应用层,叫做:`重应用层模式`
|
||||
|
||||
在领域层中,你的实体,以及跟实体相关的设施可在这里
|
||||
同时你也可以创建领域服务(Managers文件夹中),管理当前子领域的聚合,例如:
|
||||
|
||||
> 在学校模块中,包含了学生、教师、教室,为了更加聚合,可在学校模块中创建领域服务
|
||||
|
||||
## Application 应用层
|
||||
接下来,是应用层
|
||||
|
||||

|
||||
熟悉的Crud、熟悉的Service,这里可以存放简单的通用业务,例如:Crud
|
||||
如果是重应用层开发,你完全可以将业务写入到应用层,当一个快乐的三层架构Crud,Boy
|
||||
|
||||
另外,关于上次的Job任务调度、事件处理也可以放在这里进行处理
|
||||
|
||||
> 简单而优雅~何乐而不为?
|
||||
|
||||
## Application.Contracrs 抽象层
|
||||
Application.Contracrs应用抽象模块,是对应用模块的抽象,它的结构也非常的简单
|
||||
|
||||

|
||||
|
||||
这里有Dtos的概念,不出意外,大部分人已经接触,具体的可以在后续Crud中进行讲解
|
||||
|
||||
## SqlSugarCore 数据访问层
|
||||

|
||||
|
||||
这一层中,依赖领域层,但是不依赖应用层
|
||||
用于使用Sqlsugar相关的操作,比如`自定义仓储`
|
||||
但是,其实大部分通用场景,框架内部已经封装,能用到这层的机会都比较少
|
||||
对复杂的数据访问封装
|
||||
|
||||
> 由于Querable对象用起来并没有到达SugarQuerable的爽感,且也不想让每个复杂查询都通过仓储进行扩展,这会导致用户使用感较差,所以经过各类平衡考虑,YiFramework框架与Sqlsugar是有轻量的`耦合性`的,框架提供Sqlsugar抽象层,避免过重的耦合,意味着,你可以在大部分地方使用Sqlsugar的操作,这在真正的业务项目来说,使用非常的方便,与Sqlsugar保持有一致的观念
|
||||
|
||||
## Web 层
|
||||
最后一个同样非常简单的一层
|
||||
Web模块,它的目的只是利用Asp.NetCore host Web主机,将应用层的业务通过Webapi形式暴露出去而已
|
||||

|
||||
|
||||
可以看的出,结构很简单,甚至除了启动配置目录,连其他一个额外的目录都没有
|
||||
|
||||
> 综上所述,我们的业务,我的开发代码,大部分都在`领域层`与`应用层`
|
||||
|
||||
光说不练,源代码直接提供rbac、bbs两大模块,结构是一致的,直接看看依葫芦画瓢不就清楚啦~
|
||||
@@ -1,60 +0,0 @@
|
||||
## 简介
|
||||
通常,在Asp.NetCore中,**容器组装**过程 与 **管道模型组装** 过程 会将启动类文件变的非常长,同时也需要明确各个模块的依赖关系
|
||||
例如:
|
||||
我们需要仓储的功能,但是仓储的实现需要依赖Sqlsugar
|
||||
老的引入写法:
|
||||
``` cs
|
||||
service.AddUow();
|
||||
service.AddSqlsugar();
|
||||
......
|
||||
var app=service.Build();
|
||||
app.UseSqlsugar();
|
||||
......
|
||||
```
|
||||
这个文件会变得非常长,同时如果有顺序依赖关系的模块,还需按顺序组装
|
||||
例如:
|
||||
在Asp.NetCore,我们只有先鉴权才能进行授权操作
|
||||
当模块越来越多,我们维护起来将越来越困难,所以引入了模块化功能
|
||||
|
||||
## 使用
|
||||
每一个类库都可以有自己的模块化文件,我们通常命名为类库全名+Module
|
||||
例如:`Yi.Template.Application`的模块类叫做`YiTemplateApplicationModule`
|
||||
|
||||
另外,该模块类实现`AbpModule`基类
|
||||
ConfigureServices:用来配置容器服务
|
||||
OnApplicationInitialization:用来配置管道模型
|
||||
|
||||
Abp内置`DependsOn`特性标签,可进行维护各个模块之间的依赖关系
|
||||
|
||||
## 完整例子
|
||||
创建模块化文件:
|
||||
``` cs
|
||||
using Volo.Abp.Modularity;
|
||||
using Yi.Abp.Domain;
|
||||
using Yi.Abp.SqlSugarCore;
|
||||
using Yi.Framework.Bbs.SqlSugarCore;
|
||||
using Yi.Framework.Mapster;
|
||||
using Yi.Framework.Rbac.SqlSugarCore;
|
||||
using Yi.Framework.SqlSugarCore;
|
||||
|
||||
namespace Yi.Abp.SqlsugarCore
|
||||
{
|
||||
[DependsOn(
|
||||
typeof(YiAbpDomainModule),
|
||||
|
||||
typeof(YiFrameworkRbacSqlSugarCoreModule),
|
||||
typeof(YiFrameworkBbsSqlSugarCoreModule),
|
||||
|
||||
typeof(YiFrameworkMapsterModule),
|
||||
typeof(YiFrameworkSqlSugarCoreModule)
|
||||
)]
|
||||
public class YiAbpSqlSugarCoreModule : AbpModule
|
||||
{
|
||||
public override void ConfigureServices(ServiceConfigurationContext context)
|
||||
{
|
||||
context.Services.AddYiDbContext<YiDbContext>();
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
在启动管道模型组装文件使用入口模块:
|
||||
Reference in New Issue
Block a user