项目结构 #
后端框架服务结构图 #
mall3s微服务框架项目 #
后端统一依赖Mall3s微服务框架Mall3s.ServiceFabric,该组件库提供了mall3s最核心的所有公共组件。该组件库主要参考dotnetcore最流行的开源框架Furion (opens new window),并结合mall3s多年微服务实战框架库打造而成(如nacos,elk,nsq,rabbitmq,xxljob,cap等).
感谢Furion项目提供了非常棒的dotnetcore应用开发框架,我们站在巨人的肩膀上进行开发迭代。关于Furion介绍请参考:Furion (opens new window)
Mall3s基础组件功能 #
关于Mall3s.ServiceFabric中Mall3s组件库包含的基础功能如下
Mall3s基础组件包扩展 #
包类型 | 名称 | 描述 |
---|---|---|
(opens new window) | Mall3s | Mall3s核心包 |
(opens new window) | Mall3s.Authentication.JwtBearer | Mall3s Jwt扩展包 |
(opens new window) | Mall3s.Common | Mall3s 多年公共基类拓展包 |
(opens new window) | Mall3s.Core.Redis | Mall3s Redis 拓展包 |
(opens new window) | Mall3s.Data.SqlSugar | Mall3s SqlSugar 拓展包 |
(opens new window) | Mall3s.Expand.Thirdparty | Mall3s第三方认证扩展,如企业微信、 钉钉、邮件、短信等 |
(opens new window) | Mall3s.Logging.Serilog | Mall3s Serilog 拓展包(ELK支持) |
(opens new window) | Mall3s.Mapster | Mall3s Mapster 拓展包(对象映射) |
(opens new window) | Mall3s.Nacos | nacos服务注册与发现扩展包 |
Mall3s.NSQ | Mall3s NSQ扩展包 | |
(opens new window) | Mall3s.Rabbit | Mall3s RabbitMQ消息队列扩展包 |
(opens new window) | Mall3s.XxlJob | Mall3s xxl-job分布式任务扩展包 |
Mall3s微服务组件包扩展 #
包类型 | 名称 | 描述 |
---|---|---|
(opens new window) | Mall3s.ServiceFabric | 微服务核心扩展包,集成了mall3s所有中间件 |
(opens new window) | Mall3s.ServiceFabric.Cap | 微服务cap分布式事务中间件 |
(opens new window) | Mall3s.ServiceFabric.Core | Mall3s 微服务场景库及工具类 |
(opens new window) | Mall3s.ServiceFabric.CAP.Dashboard | cap分布式事务dashboard监控面板库 |
以上微服务包您可以直接通过nuget进行安装。源代码仅供您自行研究和学习。
项目参考
Mall3s.Server后端结构 #
后端采用模块化的架构,基础管理框架项目主要提供基础服务,按照功能拆分成多个 Module,提升开发与研发的效率,带来更好的可维护性。mall3s框架结构如下:
Mall3s.Server按解决方案文件夹一共分为四个部分:
base文件夹。
Mall3s.Library(该项目主要用于管理所有Mall3s.Server的依赖公共组件包,防止污染各个项目)
Mall3s.OAuth主要管理mall3s身份认证sso服务。
modules文件夹该文件夹主要用于管理所有的可拔插模块,每一个可拔插模块分为三个部分:
服务层(Application)
实体层(Entitys)
接口层(Interface)
modules包含以下模块:
App项目主要是管理移动端和h5端接口。
Extend项目主要是基础管理扩展的功能模块(如邮件管理、文档管理等)。
Message项目主要是管理站内信、通知消息功能。
System项目是后台管理核心功能,菜单、角色等。
TaskSchedule项目主要管理定时任务框架
Tenant项目主要是管理租户服务。
VisualData项目主要是管理大屏虚拟数据。
VisualDev项目主要是管理代码生产以及零代码开发。
WorkFlow项目项目主要是管理工作流。
SDK文件夹主要是提供nuget包给其他项目可以通过nuget进行微服务调用。
WebApi文件夹主要是提供Web接口服务,它包含以下模块:
Mall3s.WebApi.System 基础系统接口服务(调度服务+消息中心已合并至System中)
Mall3s.Tenant租户接口服务
下面,我们来逐个看看。
1. Mall3s.Library #
该模块是一个Bom,它定义项目中所有 Mall3s依赖的版本号,解决依赖冲突问题。
具体是指,我们将依赖的核心第三方dll都通过Mall3s.Library来引用,当项目要升级第三方组件版本,可只需要升级Mall3s.Library即可。
2. modules目录 #
该模块是某个功能的模块,目前内置了 10 个模块。
项目 | 说明 | 是否必须 |
---|---|---|
System | 基础设施(系统基础模块) | √ |
App | 移动端/h5端模块 | √ |
Message | 消息中心模块 | √ |
TaskSchedule | 定时任务调度模块 | √ |
Tenant | 租户管理模块 | x |
VisualData | 虚拟大屏数据模块 | x |
VisualDev | 代码生成器及零代码模块 | √ |
WorkFlow | 工作流模块 | √ |
Extend | 内置业务模块 | x |
SubDev | 内置Demo模块 | x |
每个模块包含3个工程,分别是:
项目工程 | 作用 |
---|---|
Mall3s.xxx | 模块的功能的具体实现 |
Mall3s.xxx.Entitys | 模块的功能依赖的实体定义 |
Mall3s.xxx.Interfaces | 提供给其它模块的 API 定义 |
例如说,Mall3s.System
想要访问 Mall3s.Message
消息中心模块的数据,需要引入 Mall3s.Message.Interfaces
子模块。示例如下:
- Mall3s.System的Service模块的项目结构如下:
2、Mall3s.System.Entitys的项目结构如下:
名称 | 类 | 作用 |
---|---|---|
Dto | DTO 类 | Api 接口的入参 ReqDTO、出参 RespDTO |
Entity | Entity类 | 数据库实体定义 |
Enum | Enum 类 | 数据字典的枚举 |
Mapper | Mapper类 | 前端实体dto到数据库对象的Mapping映射定义 |
Model | Model类 | 数据库-》输出前端的Model定义实体。 |
3、Mall3s.System.Interfaces的项目结构如下:
其他模块同理。
总结来说,每个模块采用三层架构 + 非严格分层,如下图所示:
3. SDK目录 #
该模块主要是用于提供公共服务,可以发布nuget包,其他人可以很方便的引用nuget包调用。主要用于微服务场景,在多个业务子系统中,可以方便的跨服务调用。该模块主要通过WebApiClient+微服务(nacos)做远程调用方式。
比如运营系统与oa系统之间需要远程调用获取汇率,则可以通过微服务nacos方式,引用oa系统的包,让运营系统开发同事,无感知调用另一个子系统,而无需知道对方具体接口地址和服务信息。
4. WebApi目录 #
该模块是后端 Server 的主项目,通过引入需要 Mall3s.xxxx
业务模块,从而实现提供 RESTful API 给 Mall3s.Web
、Mall3s.App.Web
等前端项目。
本质上来说,它就是个空壳(容器)!如下图所示:
前端结构 #
前端一共有3个项目,分别是:
项目 | 说明 |
---|---|
Mall3s.Web | 基于 Vue2 +eElement-ui 实现的管理后台 |
Mall3s.App.Web | 基于 uni-app + uni-ui 实现的管理后台的小程序 |
Mall3s.Tenant.Web | 基于 Vue2 +eElement-ui 实现的租户管理后台 |
1. Mall3s.Web #
├── bin // 执行脚本
├── build // 构建相关
├── public // 公共文件
│ ├── favicon.ico // favicon 图标
│ └── index.html // html 模板
├── src // 源代码
│ ├── api // 所有请求【重要】
│ ├── assets // 主题、字体、图标等静态资源
│ ├── components // 全局公用组件
│ ├── directive // 全局指令
│ ├── layout // 布局
│ ├── plugins // 插件
│ ├── router // 路由
│ ├── store // 全局 store 管理
│ ├── utils // 全局公用方法
│ ├── views // 视图【重要】
│ ├── App.vue // 入口页面
│ ├── main.js // 入口 JS,加载组件、初始化等
│ ├── permission.js // 权限管理
│ └── settings.js // 系统配置
├── .editorconfig // 编码格式
├── .env.development // 开发环境配置
├── .env.production // 生产环境配置
├── .env.staging // 测试环境配置
├── .eslintignore // 忽略语法检查
├── .eslintrc.js // eslint 配置项
├── .gitignore // git 忽略项
├── babel.config.js // babel.config.js
├── package.json // package.json
└── vue.config.js // vue.config.js
2. Mall3s.App.Web #
h5端项目
├ ── .hbuilderx # 编译器配置 json(自动生成无需修改)
├ ── api # 数据请求接口
├ ── assets # 页面样式
├ ── components # 组件库
├ ── filters # 过滤器
├ ── libs # websocket、图片网络路径
├ ── pages # 页面
├ ── static # 图片,icon 图标
├ ── store # 仓库
├ ── uni_modules # uniapp 插件包
├ ── utils # 公共接口
├ ── uview-ui # UI 库
├ ── .gitignore # git 上传产生的文件
├ ── APP.vue # 一个 vue 项目的主组件,页面入口文件
├ ── main.js # 项目入口文件
├ ── manifest.json # uniapp 打包 配置
├ ── package.json # package.json
├ ── pages.json # 页面路由
├ ── postcss.config.js # postcss 配置
3. Mall3s.tenant.Web #
租户前端vue
├── bin // 执行脚本
├── build // 构建相关
├── public // 公共文件
│ ├── favicon.ico // favicon 图标
│ └── index.html // html 模板
├── src // 源代码
│ ├── api // 所有请求【重要】
│ ├── assets // 主题、字体、图标等静态资源
│ ├── components // 全局公用组件
│ ├── router // 路由
│ ├── utils // 全局公用方法
│ ├── views // 视图【重要】
│ ├── App.vue // 入口页面
│ ├── main.js // 入口 JS,加载组件、初始化等
├── .env.development // 开发环境配置
├── .env.production // 生产环境配置
├── .env.staging // 测试环境配置
├── .gitignore // git 忽略项
├── package.json // package.json
└── vue.config.js // vue.config.js