前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单层应用升级到多层应用1

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

作者头像
饭勺oO
发布2024-01-23 08:18:53
1210
发布2024-01-23 08:18:53
举报

前面我们已经逐步完善了我们的单层应用,但是随着复杂度提升,单层应用逐渐变得臃肿。为了更好地应对日益增长的业务需求和保持应用的可维护性,我们需要考虑将单层应用升级为多层应用。

升级思路

在单层应用中,我们讲基础设施的功能以及业务功能都写在同一个项目中,这将使得后期复杂度越来越高,可维护性越来越低。 首先先思考,哪些部分是属于业务无关的基础功能,哪些是通用的功能数据,哪些是业务功能。 根据这几个问题,暂时先考虑这样安排: 业务无关的基础功能抽离到Core。 通用的功能数据(如枚举,静态遍历)抽离到Shared。 把数据库相关的抽离成Domain和Data。 然后业务功能暂时还是放在Host。

整理目录结构

讲解完思路,那么接下来就是按照拆分思路整理目录结构了。 再来回顾我们单层的目录结构,如图:

image.png
image.png

开始拆分

Wheel.Core

我们先新建一个Wheel.Core类库,把Cache,DependencyInjection,Dto,EventBus,Exceptions,Expressions,Extensions,Json,Notifications,Users,Utilities迁移到进去。 这里需要注意的是,类库不包含AspNetCore的相关API,编译会报错,所以我们需要添加以下框架依赖,在项目文件中添加:

代码语言:javascript
复制
<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直接或间接依赖上面几个类库。 最终结构如下图:

image.png
image.png

跟我们一开始单层应用对比,Host的内容少了一部分,但还是稍显臃肿,我们的业务功能的实现还是堆积再Host中,所以我们还需要再做进一步的优化和拆分。 那么下一篇我们再来做进一步的工作。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 升级思路
  • 整理目录结构
  • 开始拆分
    • Wheel.Core
      • Wheel.Shared
        • Wheel.Domain
          • Wheel.Data
          • 整理项目依赖关系
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档