[.Net]使用Soa库+Abp搭建微服务项目框架(二):面向服务体系的介绍
上一章我们建立了一个典型的面向领域设计的Abp小项目,如果按照常规的开发方式,会遇到什么问题呢?
先来完善一下这个小项目,在定义好各实体类后,运行Miguration并向数据库里写入一些初始数据。

现在整个项目的依赖引用图如下,每一个都有独立的引用路线,互不干涉。

简略图如下

假设现在有一个需求,MainService业务需要用到Service1和Service2 中的数据,如何操作?
在使用Abp框架时,传统开发方式是先建立领域层服务,应用层中调用领域层服务(Manager)并返回给UI层,完成整个业务流程;或者更简单方式是直接在应用层注入仓储对象,拿到实体类做数据操作。
我们分别来完成这两个方式实现这一需求。
首先在MatoProject.MainService.Application项目中建立一个应用层服务MainService.cs并继承AsyncCrudAppService。
建立一个方法GetExtends,用于查询Entity1,Entity2 中的Type和Num字段。
方式1: 模拟传统方式在应用层获取数据:

看看依赖情况:

若是使用方式1, 在注入仓储对象的时候,势必直接引用了这两个服务的领域层,造成了耦合。
方式2: 模拟传统方式在领域层获取数据:
在Domain层中分别建立两个领域服务(Manager),并且定义GetType和GetNum方法,分别用于获取Entity1,Entity2 中的Type和Num字段


在MainService.cs的GetExtends方法更改分别调用两个Manager 的GetType与GetNum方法,从中获取Type和Num值。
拼接完成后返回结果
看看依赖情况:

若是使用方式2, 在注入领域服务(Manager)时,也势必直接引用了这两个服务的领域层,造成了项目之间的耦合
若是在MainService服务层应用了Service1 和 Service2 的话,则项目的各个模块边界将变得不明晰,上一章所讨论的依据上下文边界划分服务,也将变得没有意义。

简略图如下

现在,我们需要考虑用面向服务体系的架构改造,将MainService,Service1, Service2 解耦。
若要独立成服务,则要考虑引用其抽象,也就是要做接口化的改造,使其之间的状态变为弱关联
下一章节将介绍如何结合Abp,进行接口化改造
[.Net]使用Soa库+Abp搭建微服务项目框架(二):面向服务体系的介绍的更多相关文章
- Github+yeoman+gulp-angular初始化搭建angularjs前端项目框架
在上篇文章里面我们说到了Github账号的申请与配置 那么当你有了Github账号并创建了一个自己的Github项目之后,首要的当然是搭建自己的项目框架啦! 本人对自己的定位是web前端狗,常用开发框 ...
- Spring Cloud构建微服务架构(二)服务消费者
Netflix Ribbon is an Inter Process Communication (IPC) cloud library. Ribbon primarily provides clie ...
- 如何快速搭建一个基于ServiceStack框架的web服务
ServiceStack是一个高性能的.NET Web Service 平台,能够简化开发高性能的REST (支持JSON,XML,JSV,HTML,MsgPack,ProtoBuf,CSV等消息格式 ...
- iOS 从零到一搭建组件化项目框架
随着公司业务需求的不断迭代发展,工程的代码量和业务逻辑也越来越多,原始的开发模式和架构已经无法满足我们的业务发展速度了,这时我们就需要将原始项目进行一次重构大手术了.这时我们应该很清晰这次手术的动刀口 ...
- 基于mpvue搭建小程序项目框架
简介: mpvue框架对于从没有接触过小程序又要尝试小程序开发的人员来说,无疑是目前最好的选择.mpvue从底层支持 Vue.js 语法和构建工具体系,同时再结合相关UI组件库,便可以高效的实现小程序 ...
- Cocoapods组件化之搭建组件化项目框架
一,概述 随着公司业务需求的不断迭代发展,工程的代码量和业务逻辑也越来越多,原始的开发模式和架构已经无法满足我们的业务发展速度了,这时我们就需要将原始项目进行一次重构大手术了.这时我们应该很清晰这次手 ...
- SpringCloud:搭建微服务项目框架 microservicecloud
1.搭建整体父工程 microservicecloud 新建父工程microservicecloud,切记是Packageing是pom模式 主要是定义POM文件,将后续各个子模块公用的jar包等统一 ...
- 简单搭建iOS开发项目框架
今天我们来谈谈如何搭建框架,框架需要做一些什么. 第一步:找到我们的目标我们的目标是让其他开发人员拿到手后即可写页面,不再需要考虑其他的问题. 第二步:我们需要做哪些东西各位跟着我一步一步来进行. 假 ...
- 手把手教你从零开始搭建SpringBoot后端项目框架
原料 新鲜的IntelliJ IDEA.一双手.以及电脑一台. 搭建框架 新建项目 打开IDE,点击File -> New Project.在左侧的列表中的选择Maven项目,点击Next. 填 ...
- VueJS搭建简单后台管理系统框架 (二) 模拟Ajax数据请求
开发过程中,免不了需要前台与后台的交互,大部分的交互都是通过Ajax请求来完成,在服务端未完成开发时,前端需要有一个可以模拟Ajax请求的服务器. 在NodeJs环境下,通过配置express可访问的 ...
随机推荐
- TienChin-系统功能介绍
线索管理 添加线索 查看线索 删除线索 修改线索 分配线索: 将录入到系统的线索,分配给某一个市场专员去处理 跟进线索: 持续跟进一条线索 1.判断是否伪线索 2.持续跟进,每次跟进需要有记录 3 ...
- 【可观测性系列】 OpenTelemetry Collector的部署模式分析
作者简介:大家好,我是蓝胖子 ️博客首页:主页蓝胖子的编程梦 ️热门专题:我的服务监控实践 ,500行代码手写Docker **每日一句:白日莫闲过,青春不再来 大家好,我是蓝胖子,在前面我介绍了下O ...
- 【题解】P5461 赦免战俘
一.题目 现有 \(2^n\times2^n\ (n≤10)\) 名作弊者站成一个正方形方阵等候 kkksc03 的发落.kkksc03 决定赦免一些作弊者.他将正方形矩阵均分为 4 个更小的正方形矩 ...
- Hive-服务启动和停止命令
1.启动命令 #!/bin/bash nohup hive --service metastore >> $HIVE_HOME/logs/metasotre.log 2>&1 ...
- Hadoop的stop-all无法关闭集群原因及解决方案
问题现象:在服务器上长时间运行hadoop之后,如果运行stop-all.sh,会发现: [root@node1 sbin]# stop-all.shThis script is Deprecated ...
- CF1834
A 给出一个由 \(1,-1\) 组成的序列.一次操作可以让一个数变相反. 要多少次操作,才能让整个序列和非负且积等于 \(1\). 大 氵题. B 定义两个数 \(A,B\) 有一个价值:每一位上的 ...
- CF739A Alyona and mex 题解
题目传送门 前置知识 贪心 | 构造 解法 从贪心的角度分析,最小的 \(\operatorname{mex}\) 仅会与长度最小的区间有关:另外为使得 \(\operatorname{mex}\) ...
- 解决highlightjs中纯文本被解析成HTML无法展示的问题,记一次工作中bug修复的思考
壹 ❀ 引 在本周迭代bug修复工作中,遇到了两个比较头疼的bug(同一个客户所提),bug问题描述也很奇怪,客户表示产品的富文本编辑器里的代码块功能,在纯文本语言模式下贴特定代码进去有的看不见,有的 ...
- sensitive-word-admin 敏感词控台 v1.2.0 版本开源
开源目的 丰富 sensitive-word 的生态. 提供最基本的操作例子,便于在此基础上丰富实现自己的敏感词控台. 避免重复开发的成本,让更多的精力专注于业务. 拓展阅读 sensitive-wo ...
- 【Unity3D】导航系统
1 导航系统简介 导航系统用于智能避障并寻找目标物体,如:王者荣耀中,当玩家跑到敌方塔的攻击范围内,敌方塔就会发射火团攻击玩家,当玩家逃跑时,火团会智能跟随玩家,其中智能跟随就使用到了导航系统. ...