[.Net]使用Soa库+Abp搭建微服务项目框架(一):Abp与DDD相关知识回顾
在企业中大型项目中,随着业务的不断拓展,项目发展到一定程度,需要寻求项目的各模块解耦,独立成为微服务。如何实现呢?
首先我们先来简单回顾一下Abp框架怎样实现(DDD)领域驱动设计的,Abp框架的全称是:Asp.Net Boilerplate Project(即Asp.Net 的样板项目),我们知道在领域驱动设计中,我们可以将整个系统分为四个大的层次,每一个层次都有其特定的功能,所以整个项目整体结构是非常清楚的。
Eric Evans在《领域驱动设计-软件核心复杂性应对之道》这本书中提出了传统的四层架构模式,这也是Abp框架目前所用到的分层模型,如下图所示:

怎样将模型落地到项目中呢? 我们先来分析一下Abp官方生成项目中的目录结构。以“MatoProject”为命名空间从Abp官网生成一个原始项目,打开解决方案:

可以看到这几个项目,通过分析,分层模型大致对应到具体的项目为:
- MatoProject.Application:应用层,定义与UI层交互的标准接口内容,包括交互的方式(HttpPost 或者 Get),权限分配(Authorization),定义数据传输对象(Dto)表明上层关心的模型 ,这一层常用于组装数据并返回;
- MatoProject.Core:领域层,包含了业务对象实体类Entity,一些实体类的操作方法,一些核心的算法等,也就是Abp定义的领域服务(DomainService),这个是整个应用的核心部分;
- MatoProject.Web.Host,MatoProject.Web.Core 以及Abp框架本体:基础设施层,提供帮助类,比如ORM以及UnitOfWork的对象,从而为上面更高层次提供基础服务;
- 调用整个应用层接口的前端项目,视为UI层:负责用户交互的功能,这里我们可以简单理解成前端项目以及其它可以和用户进行交互的可视化方式,这一层只用于进行展示。
其他的MatoProject.EntityFrameworkCore,和MatoProject.Migurator,属于脚手架相关服务,负责搭建实体对应的数据库表结构以及创建种子数据,用于迁移过程中向数据库写入原始数据。
这是Abp对项目的分层,不同的开发人员对DDD的理解不同,项目分层结构亦有不同之处。
基于这个基础项目,假设我们有几个功能要实现,他们的名称分别为MainService,Service1,Service2。这些实现都是属于独立的业务范畴,我们首先在领域层中建立他们的服务:

以及领域模型,MainEntity,Entity1, Entiy2。


应用层建立各个服务,以及增删查改的封装:

基础设施层可以依赖于Abp的项目,还有自定义的帮助类,都丢到Infrastructure项目中

整个解决方案的结构类似这样:

回到刚刚的问题,刚才提到MainService,Service1,Service2是独立的业务模块,怎样的业务划分可以独立成业务模块?这就要讨论一个业务的上下文边界(BC)问题
不同的系统或者子系统有各自的模型(算法,数据,行为)。两个系统中业务之间共同依赖的逻辑则是上下文边界,它起到桥梁的作用。
例如客户关系管理系统(CRM),交易记录子系统和客户支持子系统都会调用客户实体、产品实体的属性和数据。这样就产生了上下文边界, 而它们是隶属于各自不同上下文边界,如下图:

引用自BoundedContext (martinfowler.com)
具体如何落实处理上下文边界的问题呢?在传统的系统中,客户实体、产品实体是被两个子系统引用的,他们之间是强关联状态
下一章开始,介绍如何用面向服务体系的方式,完全解耦模块之间的关联。
[.Net]使用Soa库+Abp搭建微服务项目框架(一):Abp与DDD相关知识回顾的更多相关文章
- SpringCloud:搭建微服务项目框架 microservicecloud
1.搭建整体父工程 microservicecloud 新建父工程microservicecloud,切记是Packageing是pom模式 主要是定义POM文件,将后续各个子模块公用的jar包等统一 ...
- [Abp vNext微服务实践] - 框架分析
一.简介 abp vNext新框架的热度一直都很高,于是最近上手将vNext的微服务Demo做了一番研究.我的体验是,vNext的微服务架构确实比较成熟,但是十分难以上手,对于没有微服务开发经验的.n ...
- Soa: 一个轻量级的微服务库
Soa 项目地址:Github:MatoApps/Soa 介绍 一个轻量级的微服务库,基于.Net 6 + Abp框架 可快速地将现有项目改造成为面向服务体系结构,实现模块间松耦合. 感谢 Rabbi ...
- [Abp vNext微服务实践] - 文章目录
简介 ABP vNext是volosoft的新一代框架,ABP(vNext)完全使用.NET CORE和DDD(领域驱动)打造,目前GitHub已有6K+次提交,发布版本超过40次,Nuget包下载量 ...
- 使用Yii2的Web框架搭建微服务框架
方法 使用自己的Yii2镜像作为基础 使用Yii2的Web框架搭建,为了节省搭建Yii2框架的时间,直接使用现有的Yii2项目,删除了业务相关的逻辑类,将这个代码库作为搭建微服务框架的基础,本身已经积 ...
- 【译文】用Spring Cloud和Docker搭建微服务平台
by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...
- 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)
背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...
- spring cloud+.net core搭建微服务架构:服务注册(一)
背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...
- 从面向服务架构(SOA)学习:微服务时代应该借鉴的5条经验教训
[编者按]本文作者为 Matt McLarty,通过介绍 SOA 的兴衰变化,总结了微服务应该借鉴的5条经验教训.文章系国内 ITOM 管理平台 OneAPM 编译呈现. SOA 的兴衰变化让我们更了 ...
- [译]ABP vNext微服务演示,项目状态和路线图
译注: ABP的主要负责人hikalkan最近又发布了一篇博客, 说明了ABP vNext的微服务演示,项目状态和路线图.其中特意对ABP的中文社区进行了感谢! 本文翻译自该博客文章(https:// ...
随机推荐
- Matplotlib配置图例legend()设置透明和并排显示
1.多排显示 x=np.linspace(start=-np.pi,stop=np.pi,num=300) plt.style.use('classic') Fig,Axes=plt.subplots ...
- 4.基于Label studio的训练数据标注指南:情感分析任务观点词抽取、属性抽取
情感分析任务Label Studio使用指南 1.基于Label studio的训练数据标注指南:信息抽取(实体关系抽取).文本分类等 2.基于Label studio的训练数据标注指南:(智能文档) ...
- 7.1 C/C++ 实现动态数组
动态数组相比于静态数组具有更大的灵活性,因为其大小可以在运行时根据程序的需要动态地进行分配和调整,而不需要在编译时就确定数组的大小.这使得动态数组非常适合于需要动态添加或删除元素的情况,因为它们可以在 ...
- Win32汇编:仿写多态与虚函数
多态性是面向对象的重要组成部分,利用多态可以设计和实现易于扩展的程序,所谓多态就是一个类函数有多重形态,具有不同功能的函数可以用同一个函数名,实现使用一个函数名调用不同内容的函数,从而返回不同的结果, ...
- [XXL-JOB] 分布式调度XXL-JOB快速上手
1.概述 1.1什么是任务调度 我们可以思考一下下面业务场景的解决方案: 某电商平台需要每天上午10点,下午3点,晚上8点发放一批优惠券 某银行系统需要在信用卡到期还款日的前三天进行短信提醒 某财务系 ...
- python识别图片中的文本保存到word中
python可以使用第三方库pytesseract实现图像的文本识别,并将识别的结果保存到word中,代码本生不复杂pytesseract环境有点麻烦这里整理总结一下 一.简介 Tesseract是一 ...
- .NET 云原生架构师训练营(模块二 基础巩固 引入)--学习笔记
2.1 引入 http协议 web server && web application framework .net 与 .net core asp .net core web api ...
- .NET Core开发实战(第14课:自定义配置数据源:低成本实现定制化配置方案)--学习笔记
14 | 自定义配置数据源:低成本实现定制化配置方案 这一节讲解如何定义自己的数据源,来扩展配置框架 扩展步骤 1.实现 IConfigurationSource 2.实现 IConfiguratio ...
- 沿SVG路径的颜色渐变
原生的渐变方法 在SVG中提供的原生渐变方法有两种,分别为线性渐变linearGradient和径向渐变radialGradient.我们以一个稍微复杂的路径来作为模板,为其添加两种渐变效果: < ...
- STM32F407VET6烧录出现flash download failed target dll has been cancelled
今天在通过stlink烧录一个长时间未用的STM32F407VET6 Black Board的时候, 出现错误 Internal command error Flash download failed ...