首页 > 其他分享 >SimpleAdmin手摸手教学之:项目架构设计2.1

SimpleAdmin手摸手教学之:项目架构设计2.1

时间:2023-05-26 16:45:48浏览次数:51  
标签:架构设计 插件 SimpleAdmin 配置 -- json cs 2.1

一、说明

在2.0的架构设计中引用了插件式开发的概念,将功能模块插件化,以实现更清晰的目录结构,更灵活的解决方案,减少代码的臃肿性。随着2.0版本的使用,也随之暴露出一些问题,之前讲究的插件化并没有完全的实现插件化,我理想的插件化应该是需要某个业务或者功能模块,直接引用该项目既可,不需要进行额外的操作,而现在我们引用了一个业务或者功能模块,还需要一些额外的操作,比如需要把实体放置在Sqlsugar插件中,种子数据放置在CodeFisrs插件中,这样显然并没有达到插件式开发的目的。也不是我想要的结果。因为接下来准备移动端业务的开发,但是又不想把移动端的业务放置在主工程中,因为不是所有用户都需要,所以决定对现有的架构进行升级优化,实现真正插件化,每一个插件都是独立的,包含实体、种子数据和service类等,主项目需要的时候只需要引用到项目中来就行了。以下是2.1架构设计的一些优化:

  1. 真·插件式开发:实现真正的插件式开发,每一个功能/业务模块都是独立的,可以独立生成种子数据和初始化表,不需要动其他项目。
  2. 将批量修改和导入导出插件合并到system层:这两个插件本应都是系统层的功能,之前分出来是觉得好维护,后来发现分的太细了还是合到system层好点。
  3. Cache和SqlSugar插件移除改为架构核心:理论上Cache和Sqlsugar不能算插件,而是系统基础于是就移到了架构核心模块。

 

二、项目结构

2.1的项目结构项目和2.0没啥太大变化,只是调整了项目位置和项目分层。

三、分层说明

3.1 架构核心

SimpleAdmin.Core->核心层

核心层,公共组件,常量,枚举,通用方法等其他核心代码,可以被任何项目引用,不依赖其他项目。

│  Core.Development.json  -->  开发环境配置
│  Core.Production.json  -->  生产环境配置
│  Startup.cs  -->  启动类
├─Attributes  -->  特性
├─BaseInput  -->  共用输入参数(分页,ID传参等)
├─Components  -->  公共组件
├─Const  -->  常量
├─Dto  -->  数据类
├─Enum  -->  枚举类
├─Extension  -->  拓展
├─Options  -->  配置转实体选项
├─UnifyResult  -->  统一返回结果
└─Utils  -->  工具类(验证码,图片处理,种子数据处理等)

SimpleAdmin.Cache->缓存层

缓存层,系统核心之一,用来存储用户信息和认证信息和一些常用的数据库数据,支持MemeryCacheRedis

│  Cache.Development.json  -->  开发环境配置
│  Cache.Production.json  -->  生产环境配置
│  Startup.cs  -->  启动类
├─Const  -->  常量
├─Inerface  -->  接口
├─Options  -->  配置转实体选项
├─Service  -->  实现接口的服务类,分别是memerycache和redis的实现

SimpleAdmin.SqlSugar->ORM层

ORM层基于SqlSugar单例模块和仓储模式,将之前的CodeFirst集成到了该层。

│  SqlSugar.Development.json  -->  开发环境配置
│  SqlSugar.Production.json  -->  生产环境配置
│  Startup.cs  -->  启动类
├─Const  -->  常量
├─Db  -->  SqlSugar配置
├─Dto  -->  数据类
├─Entity  --> 实体
├─Extension  -->  拓展
└─Utils  -->  工具类(CodeFirst,种子数据处理等)

3.2 系统插件

3.2.1 核心插件

核心插件通常放置一些系统通用插件.

SimpleAdmin.Core>插件核心

├─Enum  -->  枚举
├─Interface  -->  接口
├─Options  -->  配置转实体类

SimpleAdmin.Aop>Aop插件

实现Aop功能的插件,具体使用看Furion文档

├─Aop  -->  Aop实现类
├─Attributes  --> Aop特性

3.2.2 系统模块插件

 系统模块插件主要是对应的我们SimpleAdmin.System层所用到的插件。

SimpleAdmin.Gen>代码生成器插件

实现系统代码生成功能

│  Gen.Development.json  -->  开发环境配置
│  Gen.Production.json  -->  生产环境配置
│  Startup.cs  -->  启动类
├─Const  -->  常量
├─Controllers  -->  控制器
├─Entity  --> 实体
├─Options  -->  配置转实体
└─SeedData  -->  种子数据
└─Services -->  服务类

SimpleAdmin.Mqtt>Mqtt插件

实现mqtt通信功能

│  Mqtt.Development.json  -->  开发环境配置
│  Mqtt.Production.json  -->  生产环境配置
│  MqttComponent.cs  -->  组件类
├─Const  -->  常量
├─Controllers  -->  控制器
└─Services -->  服务类

SimpleAdmin.SignalR>SignalR插件

实现Signalr及时通讯功能

│  SignalRComponent.cs  -->  组件类
├─Hub  -->  Hub类
├─Provider  -->  ID提供全
└─Service -->  服务类

3.3 业务模块

SimpleAdmin.System->系统应用层

系统应用层,主要是提供系统应用服务给Api接口层调用,SimpleAdmin的主要功能都由该层实现。

│  Startup.cs  --> 启动类
│  System.Development.json  -->  开发环境配置
│  System.Production.json  -->  生产环境配置
├─Attributes  -->  特性
├─Entity  -->  实体
├─EventSubscriber  -->  事件总线
├─ExtJson  -->  实体中的ExtJson
├─Options  -->  配置转实体类
├─Oss  -->  对象存储
├─Services  -->  服务(系统功能接口加实现)
└─UserManager  -->  用户中心(获取当前请求用户信息)

SimpleAdmin.Application->业务应用层

业务应用层,主要是业务代码的编写,可以将自己的业务写在该层,当然也可以自己新建一层写。本系统该层主要是用作数据权限示例。

│  Application.Development.json  --> 开发环境配置
│  Application.Production.json  --> 生产环境配置
│  Startup.cs  --> 启动类
│  Options  --> 配置项转实体
└─Services  --> 服务(业务功能实现)

3.4 应用服务

3.4.1 Web

SimpleAdmin.Web.Entry->启动层

Web 入口层,主要作用就是作为程序入口,没有什么实际业务,没啥好讲的,主要是一些全局的设置,详情见appsettings.json

│-- appsettings.json --> 启动层配置文件
│-- ip2region.db --> 解析ip用的数据库文件
│-- Program.cs --> 启动类

SimpleAdmin.Web.Core->WebApi接口层

Api接口层,存放web应用所需要用到的代码,如组件,控制器,中间件,过滤器等。

│  Startup.cs  --> 启动类
│  Web.Development.json  --> 开发环境配置
│  Web.Production.json  -->  生产环境配置
├─Components  --> 存放Web组件
├─Controllers --> 存放控制器
├─Filter  --> 过滤器
├─Handlers  -->  处理器
└─Logging  -->  操作日志功能
└─Options  -->  配置文件转实体选项类

3.4.2 后台服务

SimpleAdmin.Background->后台服务层

后台服务层,作为定时任务,MQTT或其他服务载体常驻于后台,不依赖于Web,不会因web服务升级而停止。这样做的好处就是不会被iis内存回收,也不会因为web服务升级而停止工作。

│  Background.Development.json  --> 开发环境配置
│  Background.Production.json  --> 生产环境配置
│  MqttWorker.cs  --> mqtt后台任务
│  Program.cs  -->  启动类
├─Dto  -->  数据转换类

四、总结

2.1的架构是2.0的优化版本,实现了真插件式开发,以后需要哪个业务模块直接引用就行了,为后面移动端模块打下了基础,简直Nice.

标签:架构设计,插件,SimpleAdmin,配置,--,json,cs,2.1
From: https://www.cnblogs.com/huguodong/p/17435137.html

相关文章

  • 最完美WIN10_Pro_22H2.19045.3031软件选装纯净版VIP41.7
    【系统简介】=============================================================1.本次更新母盘来自网络某大神。进一步精简优化调整。2.只为呈现最好的作品,手工精简优化部分较多。3.OS版本号为19045.3031。个别要求高的就下MSDN吧,里面啥功能都有。4.集成《DrvCeo-2.13.0.8》网卡版、......
  • 在本地运行spark程序,出现Scala module 2.13.4 requires Jackson Databind version >=
    这是jackson多版本题,我们需要屏蔽所有hadoop组件中的Jackson,在pom.xml文件里修改:添加<exclusions><exclusion><groupId>com.fasterxml.jackson.module</groupId><artifactId>*</artifactId></exclusion><exclusion>......
  • fastposter v2.15.0 从繁琐到简单,简洁好用的海报生成器
    fastposterv2.15.0从繁琐到简单,简洁好用的海报生成器从繁琐到简单,简洁好用的海报生成器我很高兴向大家推荐一款令人兴奋的工具——Fastposter海报生成器。作为一名开发者,我们深知在项目中创建专业级海报的重要性,但常常面临时间和设计技能的限制。现在,Fastposter海报生成器为我们......
  • fastposter v2.15.0 从繁琐到简单,简洁好用的海报生成器
    fastposterv2.15.0从繁琐到简单,简洁好用的海报生成器从繁琐到简单,简洁好用的海报生成器我很高兴向大家推荐一款令人兴奋的工具——Fastposter海报生成器。作为一名开发者,我们深知在项目中创建专业级海报的重要性,但常常面临时间和设计技能的限制。现在,Fastposter海报生成器为我......
  • 表达式语言引擎:Apache Commons JEXL 2.1 发布
    CommonsJEXL2.1发布了,该版本和2.0.1是二进制兼容的,但源码不兼容,因为新增了两个接口:org.apache.commons.jexl2.Scriptorg.apache.commons.jexl2.JexlInfoJEXL2.1改进内容:Amorethorougharithmetic(JexlArithmetic)thatallowsfinecontroloverdecimals(scaleand......
  • 红包雨的架构设计及源码实现 中奖代码设计 一般有用 看1
    1.项目介绍学习目标系统的功能、背景、场景及需求在架构角度思索系统可能面临的问题以及解决方案运用中间件特性,完成架构设计主业务源码分析微服务的部署与动态扩容1.1项目概述1.1.1概述京东的红包雨大家可能都参与过,在某段时间内随机发放不同的红包,如果公司让你设计类似......
  • 2.1数据操作
    2.1.1数据操作注意此处import的不是pytorch而是torch。Torch是采用lua语言实现的,从某种程度上说,PyTorch是Torch的Python版本。(当然还是有部分差别的)importtorch张量(tensor)可以说是机器学习中的数组,直观的看张量像是封装了数组以及一系列相关操作的数据结构。......
  • 解决xfreerdp在Ubuntu22.10无法退出全屏问题
    最近升级了一下Ubuntu到22.10,然后发现xfreerdp链接上远程计算机后,无法通过快捷键退出全屏,我们可以在terminal命令中添加dynamic-resolution参数即可;xfreerdp/multimon/u:common\\mango/p:*****/v:192.168.1.168/dynamic-resolution......
  • 2022.11.24 NOIP模拟赛
    A.不降序列题目描述lzx2005了解到有一种在\(O(n\logn)\)的时间复杂度内求出一个序列\(a\)的最长不下降子序列的方法如下:维护一个序列\(b\),初始时为空。依次考虑\(a_1,a_2,\ldots,a_n\),当考虑到\(a_i\)时,求出序列\(b\)中第一个比\(a_i\)大的元素,然后使用\(a_i......
  • 2022.11.23 51nod 图论专场?
    A反转Dag图:题面给出一个\(n\)个点\(m\)条边的有向图,顶点编号\(1\)到\(n\),边的编号为\(1\)到\(m\)。你可以选择一些边进行反转(即从\(u\)到\(v\)的边反转后变为从\(v\)到\(u\)的边),将每条边反转都需要一定代价。最终使得整个图变成一个\(Dag\)图。总的反......