[.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:// ...
随机推荐
- React中引入外部js文件
假设需要引入本地的一个jquery库: <script src="http://127.0.0.1:8080/plugins/jquery.min.js" type=&quo ...
- DataSet类型转换实体
查询DataSet类型无法对每条数据进行循环转换,利用泛型对象使用反射机制将对象相关属性进行自动赋值. 基础调用 DataSet ds = DbHelper.Query(SQL); if (ds.Ta ...
- Scrapy数据解析和持久化
Scrapy框架的使用 - pySpider - 什么是框架? - 就是一个具有很强通用性且集成了很多功能的项目模板(可以被应用在各种需求中) - scrapy集成好的功能: - 高性能的数据解析操作 ...
- ROS节点通信(一)消息发布和订阅
目录 1.说明 2.创建工作空间 3.创建功能包 4.编写自定义传输类型文件 5.编写源代码 5.1.编写发布者代码 5.2.编写订阅者代码 6.编译 7.启动运行 8.查看ROS网络结构图 1.说明 ...
- pthread库的使用
目录 1.说明 2.使用 2.1.pthread_create 2.2.pthread_join 2.3.pthread_exit 2.4.pthread_self 2.5.pthraad_detac ...
- ChatGPT 火了,一大批开源平替也来了
ChatGPT 凭一己之力让全球为 AI 沸腾,引发了科技巨头之间的聊天机器人军备竞赛. 众所周知,ChatGPT 的背后技术是 GPT(Generative Pre-trained Transf ...
- Java开发学习(四十七)----MyBatisPlus删除语句之多记录操作
1.多记录操作 先来看下问题: 之前添加了很多商品到购物车,过了几天发现这些东西又不想要了,该怎么办呢? 很简单删除掉,但是一个个删除的话还是比较慢和费事的,所以一般会给用户一个批量操作,也就是前面有 ...
- NC207751 牛牛的旅游纪念品
题目链接 题目 题目描述 牛牛在牛市的旅游纪念商店里面挑花了眼,于是简单粗暴的牛牛决定--买最受欢迎的就好了. 但是牛牛的背包有限,他只能在商店的n个物品里面带m个回去,不然就装不下了. 并且牛牛希望 ...
- Spring的接口集合注入功能
Spring的接口集合注入功能 对于Spring中已经注入的bean, 可以使用Autowired, 通过Map<String, BeanInterface>或List<BeanIn ...
- 【OpenGL ES】Blinn改进的冯氏光照模型
1 前言 光照元素主要有环境光(ambient).漫反射光(diffuse).镜面反射光(specular),光照模型主要有冯氏模型和 Blinn 改进的冯氏模型,两者区别在与镜面反射光的计算,冯 ...