首页 > 其他分享 >单层应用升级到多层应用3

单层应用升级到多层应用3

时间:2024-01-23 16:55:08浏览次数:27  
标签:Wheel 类库 新建 多层 抽离 应用 EventBus 迁移 单层

接上文,我们已经初步完成了单层到多层的拆分,接下来就是再优化我们的结构了。

升级思路

在前文的Core项目中,包含了我们所有的基础功能,但是有些项目可能只需要部分功能却引用整一块Core的话,会显得有些多余,需要将这部分基础设施再做一下细致化的拆分。
在Host项目中,仍旧还有许多功能代码没有拆分,如EventBus,FileStoreages, Authorization,Localization等,这部分又算基础设施功能,一部分又有一定的业务属性。需要将这些功能抽象拆分出来。

开始迁移

再来回顾我们单层的目录结构,如图:
image.png

抽离DependencyInjection

首先考虑依赖注入的基础功能,这一部分是最通用的,完全可以单独放在一块。
新建类库Wheel.DependencyInjection,将三个依赖注入的接口迁移过去。很简单。
image.png

抽离Authorization

在上一篇文章中,我们的Authorization相关的代码还是放在Host中,但是这一块可以完全剥离处理,里面只包含:IPermissionChecker,PermissionAuthorizationHandler,PermissionAuthorizationPolicyProvider和PermissionAuthorizationRequirement四个代码文件。
新建类库Wheel.Authorization,把4个代码文件迁移过去,这里不包含IPermissionChecker的实现。需要依赖Wheel.DependencyInjection类库完成来做依赖注入。
image.png

抽离Cache

缓存也是属于非常基础的功能,按需引用来使用。
新建类库Wheel.Cache,将Cache中的文件迁移过去。无需依赖其他项目引用。

抽离User

ICurrentUser是根据请求获取当前用户数据的接口,也是根据业务场景使用的玩意。这里也抽出来。
新建一个类库Wheel.Users,将CurrentUser和ICurrentUser文件迁移过去。这里由于CurrentUser用到了IHttpContextAccessor来获取Http请求上下文,是Asp.Net Cored的API,需要在项目文件中添加Asp.Net Core的框架依赖:

<ItemGroup>
  <FrameworkReference Include="Microsoft.AspNetCore.App"></FrameworkReference>
</ItemGroup>

抽离Permissions

前面我们抽离Authorization的时候没有把IPermissionChecker的实现迁移过去,这里是把实现放在Permissions中。
新建类库Wheel.Permissions,依赖引用Authorization,Cache和Users。把PermissionChecker迁移到类库。

抽离Utilities

Utilities是我们的一些工具类。非常适合抽离出来单独引用。
新建类库Wheel.Utilities,依赖DependencyInjection,然后将Utilities目录中的文件迁移过来。
image.png

抽离EventBus

我们的EventBus分成了LocalEventBus和DistributedEventBus,同时又有不同的实现。所以这里EventBus则是按照实现来拆分成多个类库。
首先把基础接口抽离单独一个类库Wheel.EventBus:
image.png
这里包括了EventBus和Handler的相关接口。
然后我们按照实现分别再新建类库。

Wheel.EventBus.Cap

新建类库Wheel.EventBus.Cap,依赖引用Wheel.EventBus项目,然后把CAP实现代码迁移到这个项目中。
image.png

Wheel.EventBus.MediatR

新建类库Wheel.EventBus.MediatR,依赖引用Wheel.EventBus项目,然后把MediatR实现代码迁移到这个项目中。
image.png

Wheel.EventBus.Channels

新建类库Wheel.EventBus.Channels,依赖引用Wheel.EventBus项目,然后把Channels实现代码迁移到这个项目中。
image.png
拆分完后,我们后续使用EventBus只需要按照需要引用相关的实现即可。

抽离FileStorages

FileStorages跟EventBus一样,可能会有多个实现的类型,所以我们也按照EventBus的方式来拆分。
首先是新建一个类库Wheel.FileStorages,把FileStorages的基础接口和类迁移进来。
image.png

Wheel.FileStorages.Minio

我们暂时只对接了Minio,所以只新建一个Wheel.FileStorages.Minio类库,把Minio的实现部分迁移到这里。
image.png
拆分完后,我们后续使用FileStorages只需要按照需要引用相关的实现即可。

抽离Json

新建一个类库Wheel.Json,里面放的是一些JsonConverter,按照需要引用使用即可。
image.png

抽离Localization

新建一个类库Wheel.Localization,将Localization相关的代码迁移进来,这里我们没有把EFStringLocalizerStore加进来,因为这部分跟数据库有关,所以我们把实现还是放在了Host中,相对的添加一个NullStringLocalizerStore作为默认实现。
image.png

抽离Settings

新建一个类库Wheel.Settings,这部分跟Localiztion差不多,都需要一个ISettingStore的默认实现。
image.png

最终结构

最终整个解决方案的结构如下图所示:
image.png

对比最初的单层应用,是否瞬间感觉完全不一样了。项目结构变得更加清晰,层次更加分明。
同时我们也逐渐形成了我们框架基础设施的部分。这部分和业务无关,在开发新的业务项目时,这部分基础设施可以快速的应用到我们的新项目上,大大减少了重复开发基础设施的工作量。

欢迎进群催更。

image.png

标签:Wheel,类库,新建,多层,抽离,应用,EventBus,迁移,单层
From: https://www.cnblogs.com/fanshaoO/p/17982859

相关文章

  • 应用集成(iPaaS)和数据集成(ETL)高效协同的最佳实践
    随着企业数字化的步伐加快,企业IT工程师和数据工程师在应用和数据集成方面的工作变得日益密切。IT工程师通常利用iPaaS(Integration Platform as a Service)来进行异构应用和数据的集成,而数据工程师则倾向于使用ELT/ETL(Extract, Transform, Load)工具来进行数据集成。两者之间如......
  • 浅谈智能照明控制系统应用与节能分析
    引言随着人们的物质和精神生活水平不断提高,对生活的追求向着更舒适、安全、高效和节能的方向发展,对建筑照明技术的要求也越来越高。新兴的“智能照明”技术是现代计算机技术、控制技术、通信技术与建筑照明技术的有机结合,与传统照明技术相比在各方面均具有优越性。但是,该技术在实际......
  • 民生银行牛新庄:大数据及分布式技术在银行系统中实践应用
    把底层所有技术打通,这些技术就像ATM数据,柜台有的数据是柜台的数据,所有数据打通,第一我可以节省很多的现钞,这些现钞可以拿出去放贷款,现在流动性这么紧张。第二,你可以节省很多的成本,大家想一想,如果说这样做的话,我每天不需要那么多押运车押运。我举这个例子,这是数据,过去为什么没做到?底......
  • 解析Java Chassis 3中应用视角的配置管理
    本文分享自华为云社区《JavaChassis3技术解密:应用视角的配置管理》,作者:liubao68。谈论微服务配置管理的时候,最多的是以配置中心为视角,讨论其配置管理能力。和注册中心一样,不同的配置中心会有一些关键的设计指标。配置的格式和类型。支持不同格式和类型的配置项,比如YAML、文......
  • DevExpress WinForms导航控件 - 交付更时尚、体验更好的业务应用(二)
    DevExpressWinForms的SideNavigation(侧边导航)和NavPanel(导航面板)可以帮助客户交付完全可模仿UI体验的业务解决方案,这些体验在当今流行的应用程序中都可找到。在上文中(点击这里回顾>>),我们为大家介绍了DevExpressWinForms导航控件中的折叠组件、导航栏组件等。接下来我们将继续......
  • Vision Mamba:将Mamba应用于计算机视觉任务的新模型
    Mamba是LLM的一种新架构,与Transformers等传统模型相比,它能够更有效地处理长序列。就像VIT一样现在已经有人将他应用到了计算机视觉领域,让我们来看看最近的这篇论文“VisionMamba:EfficientVisualRepresentationLearningwithBidirectionalStateSpaceModels,”对于VIT来......
  • BOSHIDA DC电源模块的特点及应用案例分享
    BOSHIDADC电源模块的特点及应用案例分享DC电源模块是一种可以将交流电转换为直流电的设备,具有以下特点: 1.高效稳定:DC电源模块采用高效稳定的电源转换技术,可以将输入的交流电转换为输出的稳定直流电,并且具有高效能的转换效率。2.多功能性:DC电源模块通常具有多种输出电压和电......
  • React nativve 混合开发移动端应用环境搭建
    安装软件清单:AndroidStudio版本:AndroidStudioGiraffe|2022.3.1Patch3下载地址:https://developer.android.google.cn/studio/archiveJDK版本:JDK17下载地址:https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.htmlnode版本:18.17.1下载地......
  • 单层应用升级到多层应用1
    前面我们已经逐步完善了我们的单层应用,但是随着复杂度提升,单层应用逐渐变得臃肿。为了更好地应对日益增长的业务需求和保持应用的可维护性,我们需要考虑将单层应用升级为多层应用。升级思路在单层应用中,我们讲基础设施的功能以及业务功能都写在同一个项目中,这将使得后期复杂度......
  • iOS应用程序混淆加固原理及逆向工具介绍
    概要本文将介绍iOS应用程序混淆加固的原理和常见的加固类型,以及介绍一些常用的逆向工具。同时还会介绍一种代码虚拟化技术,用于进一步保护应用程序不被逆向分析。 引言移动应用程序开发面临着越来越严峻的安全挑战,特别是在越狱设备上,应用程序的可执行文件容易受到逆向工具的......