上一章我们建立了一个典型的面向领域设计的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搭建微服务项目框架(二):面向服务体系的介绍的更多相关文章

  1. Github+yeoman+gulp-angular初始化搭建angularjs前端项目框架

    在上篇文章里面我们说到了Github账号的申请与配置 那么当你有了Github账号并创建了一个自己的Github项目之后,首要的当然是搭建自己的项目框架啦! 本人对自己的定位是web前端狗,常用开发框 ...

  2. Spring Cloud构建微服务架构(二)服务消费者

    Netflix Ribbon is an Inter Process Communication (IPC) cloud library. Ribbon primarily provides clie ...

  3. 如何快速搭建一个基于ServiceStack框架的web服务

    ServiceStack是一个高性能的.NET Web Service 平台,能够简化开发高性能的REST (支持JSON,XML,JSV,HTML,MsgPack,ProtoBuf,CSV等消息格式 ...

  4. iOS 从零到一搭建组件化项目框架

    随着公司业务需求的不断迭代发展,工程的代码量和业务逻辑也越来越多,原始的开发模式和架构已经无法满足我们的业务发展速度了,这时我们就需要将原始项目进行一次重构大手术了.这时我们应该很清晰这次手术的动刀口 ...

  5. 基于mpvue搭建小程序项目框架

    简介: mpvue框架对于从没有接触过小程序又要尝试小程序开发的人员来说,无疑是目前最好的选择.mpvue从底层支持 Vue.js 语法和构建工具体系,同时再结合相关UI组件库,便可以高效的实现小程序 ...

  6. Cocoapods组件化之搭建组件化项目框架

    一,概述 随着公司业务需求的不断迭代发展,工程的代码量和业务逻辑也越来越多,原始的开发模式和架构已经无法满足我们的业务发展速度了,这时我们就需要将原始项目进行一次重构大手术了.这时我们应该很清晰这次手 ...

  7. SpringCloud:搭建微服务项目框架 microservicecloud

    1.搭建整体父工程 microservicecloud 新建父工程microservicecloud,切记是Packageing是pom模式 主要是定义POM文件,将后续各个子模块公用的jar包等统一 ...

  8. 简单搭建iOS开发项目框架

    今天我们来谈谈如何搭建框架,框架需要做一些什么. 第一步:找到我们的目标我们的目标是让其他开发人员拿到手后即可写页面,不再需要考虑其他的问题. 第二步:我们需要做哪些东西各位跟着我一步一步来进行. 假 ...

  9. 手把手教你从零开始搭建SpringBoot后端项目框架

    原料 新鲜的IntelliJ IDEA.一双手.以及电脑一台. 搭建框架 新建项目 打开IDE,点击File -> New Project.在左侧的列表中的选择Maven项目,点击Next. 填 ...

  10. VueJS搭建简单后台管理系统框架 (二) 模拟Ajax数据请求

    开发过程中,免不了需要前台与后台的交互,大部分的交互都是通过Ajax请求来完成,在服务端未完成开发时,前端需要有一个可以模拟Ajax请求的服务器. 在NodeJs环境下,通过配置express可访问的 ...

随机推荐

  1. Linux线程间交互

    前言 上一篇说过,系统会为线程mmap一块内存,每个线程有自己的私有栈,使用局部变量没啥问题.但是实际场景中不可避免的需要线程之间共享数据,这就需要确保每个线程看到的数据是一样的,如果大家都只需要读这 ...

  2. Python 实现ARP扫描与欺骗

    ARP欺骗又称ARP毒化或ARP攻击,是针对以太网地址解析协议ARP的一种攻击技术,通过欺骗局域网内访问者PC的网关MAC地址,使访问者PC错以为攻击者更改后的MAC地址是网关的MAC,导致网络不通. ...

  3. LLM面面观之RLHF平替算法DPO

    1. 背景 最近本qiang~老看到一些关于大语言模型的DPO.RLHF算法,但都有些云里雾里,因此静下心来收集资料.研读论文,并执行了下开源代码,以便加深印象. 此文是本qiang~针对大语言模型的 ...

  4. Spring Cloud Config核心功能和原理解析

    配置管理的前世今生 随着技术的发展,配置项管理变得越来越简单,尽管如今它只限于管理业务属性或者配置初始化参数等等,但是当年它可肩负着 Spring IOC 的光荣使命,风光无限. 想当年刚入行的时候还 ...

  5. (python)学习ing||类学习,@property装饰器

    class pers(): def __init__(self,hp): self._hp=hp @property def hp(self): return self._hp @hp.setter ...

  6. Java Calendar 多用,日期 加减

    服务需要订购一个月,订购一个月 不等于增加 30天:若是1,3,5的话应该 31天,要善用 Calendar public static void main(String[] args) throws ...

  7. OGG-Postgres实时同步到MySQL

    (一)数据库信息 名称 源端数据库 目标端数据库 数据库类型 Postgresql 12.4 MySQL 5.7 IP地址 20.2.127.23 20.2.127.24 端口 5432 3306 数 ...

  8. 【译】.NET 8 网络改进(一)

    原文 | Máňa,Natalia Kondratyeva 翻译 | 郑子铭 随着新的 .NET 版本的发布,发布有关网络空间中新的有趣变化的博客文章已成为一种传统.今年,我们希望引入 HTTP 空间 ...

  9. NC19857 最后的晚餐(dinner)

    题目链接 题目 题目描述 ​ **YZ(已被和谐)的食堂实在是太挤辣!所以Apojacsleam现在想邀请他的一些好友去校外吃一顿饭,并在某酒店包下了一桌饭. ​ 当Apojacsleam和他的同学们 ...

  10. NC16466 [NOIP2015]信息传递

    题目链接 题目 题目描述 有 n 个同学(编号为 1 到 n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为 i 的同学的信息传递对象是编号为Ti的同学. 游戏开始时, ...