单层应用升级到多层应用1
前面我们已经逐步完善了我们的单层应用,但是随着复杂度提升,单层应用逐渐变得臃肿。为了更好地应对日益增长的业务需求和保持应用的可维护性,我们需要考虑将单层应用升级为多层应用。
升级思路#
在单层应用中,我们讲基础设施的功能以及业务功能都写在同一个项目中,这将使得后期复杂度越来越高,可维护性越来越低。
首先先思考,哪些部分是属于业务无关的基础功能,哪些是通用的功能数据,哪些是业务功能。
根据这几个问题,暂时先考虑这样安排:
业务无关的基础功能抽离到Core。
通用的功能数据(如枚举,静态遍历)抽离到Shared。
把数据库相关的抽离成Domain和Data。
然后业务功能暂时还是放在Host。
整理目录结构#
讲解完思路,那么接下来就是按照拆分思路整理目录结构了。
再来回顾我们单层的目录结构,如图:
开始拆分#
Wheel.Core#
我们先新建一个Wheel.Core类库,把Cache,DependencyInjection,Dto,EventBus,Exceptions,Expressions,Extensions,Json,Notifications,Users,Utilities迁移到进去。
这里需要注意的是,类库不包含AspNetCore的相关API,编译会报错,所以我们需要添加以下框架依赖,在项目文件中添加:
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App"></FrameworkReference>
</ItemGroup>
Wheel.Shared#
接下来新建一个类库Wheel.Shared把静态类和枚举类的目录Const和Enums迁移进去。
Wheel.Domain#
新建一个类库Wheel.Domain,将我们的原本Domain中的所有目录迁移进去,然后把IBasicRepository,IDbTransaction,IUnitOfWork接口迁移进去。
Wheel.Data#
新建一个类库Wheel.Data,依赖Wheel.Domain项目,将DbContext,EFBasicRepository实现以及工作单元的实现DbTransaction和UnitOfWork迁移进去。
整理项目依赖关系#
代码拆分好了之后就开始整理项目间的依赖关系了。
Wheel.Core是0依赖,里面放的是框架的基础设施。
Wheel.Shared是0依赖,所有用到里面的静态类和枚举的项目才需要引用它。
Wheel.Domain依赖Wheel.Shared和Wheel.Core。
Wheel.Data依赖Wheel.Domain。
Host直接或间接依赖上面几个类库。
最终结构如下图:
跟我们一开始单层应用对比,Host的内容少了一部分,但还是稍显臃肿,我们的业务功能的实现还是堆积再Host中,所以我们还需要再做进一步的优化和拆分。
那么下一篇我们再来做进一步的工作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?