如何将 .NetFramework WebApi 按业务拆分成多个模块
如何将 .NetFramework WebApi 按业务拆分成多个模块
在 .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 的目录,并编写你的控制器
[ApiRoute("hello")]
public class HelloController : ApiController
{
[Route] public string Get() { return "HelloWorld!"; }
}
Reface.AppStarter.NPI 包含了编写一个 WebApi 的所有依赖项。
因此你只要通过 Nuget 添加了 Reface.AppStarter.NPI 就可以编写属于你的 ApiController 。
如果你需要向 控制器 中注入一些其它的组件,你只要通过构造函数注入即可:
[ApiRoute("hello")]
public class HelloController : ApiController
{
private readonly IHelloService helloService; public HelloController(IHelloService helloService) { this.helloService = helloService; } [Route] public string Get() { return "HelloWorld!"; }
}
Step 4 - 编写业务库的 AppModule
为你的 Users Library 编写一个 AppModule 。
在 Reface.AppStarter 框架模式下,每一个 Library 都至少要提供一个 AppModule ,以供给其它模块依赖。
你的 Users 也不例外,
UsersAppModule 需要使用 WebApi 功能,因此 UsersAppModule 要依赖 WebApiAppModule
[WebApiAppModule]
public class UsersAppModule : AppModule
{
}
如果你还需要 自动配置、自动 IOC / DI 注册装配,那你也可以根据你的需求添加其它的 AppModule。
Step 5 - 让你的启动项目依赖 UsersAppModule
首先,你需要为你启动项目创建一个 AppModule ,比如 WebAppModule
[UsersAppModule]
public class WebAppModule : AppModule
{
}
然后你需要创建一个 Global.asax ,相信大家应该都知道这是个什么吧。
修改你的 Global.asax 文件,使其继承于 RefaceHttpApplication ,这里的 T ,就是你的 WebAppModule。
public class MyWebApiApplication : RefaceHttpApplication
{
}
这样,就会在 Web 应用程序启动的时候,完成 Reface.AppStarter 中的所有过程。
提示 :
这个 RefaceHttpApplication 只是封装了 AppSetup.Start 的过程,你也可以不继承此类,并手动完成对 AppSetup 的启动。
Step 6 - 配置文件
通过 RefaceHttpApplication 启动,会以站点根目录的 app.json 文件作为 Reface.AppStarter 框架内的配置文件。
Reface.AppStarter.WebApi 内只有一个 Config 类型,它允许重新定义所有 WebApi 的路由前缀
{
"WebApi": {
"Prefix": "myapi"
}
}
你可以通过修改这个 Prefix 来修改所有控制器的前缀名称,( 默认值是 api )。
Step 7 - 运行
运行你的启动程序吧,并键入 /myapi/hello 你就会看到 HelloController 虽然写在了别的 Library 里,但是依然可以成功的访问。
至此就介绍了 Reface.AppStarter.WebApi 中的主要功能。
有关 Reface.AppStarter 相关功能,可以阅读 《https://www.cnblogs.com/ShimizuShiori/p/12610668.html》
有关 事件总线,会在后面的文章中向大家介绍。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
MaxCompute数据的上传下载
Tunnel Tunnel通常用来将本地的数据上传到maxcompute或将maxcompute数据下载到本地 1、MaxCompute数据的上传和下载 MaxCompute系统上传/下载数据包括两种方式DataHub实时数据通道 Tunnel批量数据通道OGG插件 大数据开发套件Flume插件 DTSLogStash插件 SqoopFluentd插件 Kettle插件 MaxCompute客户端 Tunnel查看帮助信息不带参数的tunnel或tunnel help查看帮助信息也可tunnel help upload Available subcommands:upload 支持文件或目录(只一级目录)的上传; 每一次上传只支持数据上传到一个表或表的一个分区;有分区的表一定要指定上传的分区,示例如下:tunnel upload d:testp1.txt yunxiang_01.t_test_p/gender='male'tunnel upload d:test yunxiang_01.t_test_p/gender='male' --scan=only 注释:yunxiang_01为...
- 下一篇
4月13日云栖号头条:埃塞卫生部长携20多家当地医院和中国专家“云上”交流抗疫经验
云栖号:https://yqh.aliyun.com第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策! 今日最新云头条快讯: 埃塞卫生部长携20多家当地医院和中国专家“云上”交流抗疫经验 一场由马云公益基金会、阿里巴巴公益基金会、阿里健康联合浙江大学医学院附属第二医院组织的新冠肺炎医学交流会“云端”召开,埃塞俄比亚卫生部长利娅·塔德塞带领当地20多家新冠肺炎诊疗定点医院和中国专家隔空对话。“疫情下医院管理如何做?”“缺少防护物资情况下要怎么应急处理?”“不同病区医护人员培训如何做?”……会上,浙大二院院长、浙大二院医院新冠肺炎防控领导小组组长王建安等多位中国抗疫专家远程分享了新冠肺炎疫情下医院防控经验。这是针对非洲医护人员的新冠肺炎系列医学分享交流计划的首个专场,接下来,还会陆续展开和卢旺达、南非等近10个非洲国家的专场交流分享会。 钟南山:中国无症状感染者比例不会很大 近日,钟南山接受采访时表示,无症状感染者不会凭空产生,通常会出现在两个群体:一是在疫情相对严重的地区,暂时还没有表现出症状、但可能已经被感染的人。另一个是确诊病例的密切...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS关闭SELinux安全模块
- CentOS8编译安装MySQL8.0.19
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装