如何将 .NetFramework WebApi 按业务拆分成多个模块(如何将照片文字变成文档)

网友投稿 379 2022-06-07


在 .NetFramework 中使用 WebApi ,在不讨论 微服务 的模式下,大部分都是以层来拆分库的 :

  • 基础设施
  • 数据存储层
  • 服务层
  • WeApi 层
  • 一些其它的功能库

项目结构可能会像下面这样子

 

 

 

 

有些人可能会将其中的 数据存储层、服务层 按业务功能进行垂直拆分,

但是到了 WebApi 这层,就不得不把所向所有业务功能的 Controller 都堆在这儿了。

随着业务的堆积,WebApi 这层的代码量越来越大,耦合性也越来越强,越来越难维护。

……

………

…………

这时候,微服务 就出现了。

可是,微服务 给系统所带来的复杂程度是极高的,

在某些场景下,转 微服务 可以很好的解决这些问题,但是又会带来更多的新问题,

所以我们希望有一种模式,即能像 微服务 那样对代码进行垂直切分,又能保持简单易维护的 单体应用程序 模式。

 


 

打算在 单体应用程序 中解决这种趋于 臃肿 问题,我们可以借鉴 微服务 那种 按业务垂直拆分 的思想。

但是与 微服务 不同是,它依然是单启动程序,这个启动程序能够组织出散落在各个模块中的所有 WebApi 并暴露给外部。

 

换个角度思考,其实就是将业务 模块化 。

微软维护的 Ochard 框架很好的实现了这些功能,但是使用 Orchard 可能会给你带来以下问题

  • 这是一个非常重型的框架,代码量比较大,运行速度不佳
  • 几乎没有什么中文的文档( 最多只能找到 HelloWorld 这样的浅显的教程 )
  • 官网文档是英文的,对阅读有较高的要求,而且速度很慢,需要使用正确的阅读方式
  • 系统中充斥着大量的隐匿约束( 在类型名称上的约束,前端更是使用了大量的 DynamicObject ,很难了解到到底包含了哪些可用 成员 )

....

 

于是我基于 Reface.AppStarter 开发了一套轻量级的模块化 WebApi 框架 【 Reface.AppStarter.WebApi 】,它实现了以下功能

  • 垂直拆分你的 WebApi Controller 至不同的 Library
  • 开箱即用的 Controller 构造函数注入
  • 具备 Reface.AppStarter 中的 EventBus 和 CommandBus 功能,可以很好的进行模块间的通信
  • 在 启动模块 决定启动哪些业务模块

 

使用 Reface.AppStarter.WebApi 很简单,它对原来的开发风格几乎没有什么影响,

下面将演示如何使用 Reface.AppStarter.WebApi 将 WebApi 项目拆分至各种模块

Step 1 - 创建空的 WebApi 项目

创建一个 WebApi 项目,但是你不需要在这里写任何的 Controller , 它只是你的启动程序,不需要为它编写任何与启动无关的代码。

为你的 WebApi 添加 Nuget 引用 Reface.AppStarter 。

 

Step 2 - 创建业务库

创建业务 Library ,比如 Users,你将在这个 Library 中实现有关 Users 的所有功能,包括 Controller

通过 Nuget 引用 Reface.AppStarter.NPI 

 

Step 3 - 在业务库中编写控制器

Users Library 添加一个 Controllers 的目录,并编写你的控制器


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:ASP.NET CORE WEBAPI文件下载
下一篇:Fiddler插件---将Mapi请求自动转为HTTPRunner测试用例(YAML格式)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~