![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
架构
文章平均质量分 91
林晓lx
登高现红日,实践出真知!
展开
-
深度观察2024中国系统架构师大会(SACC)
今年的中国系统架构师大会(SACC)在我所在的城市广州举办,很荣幸受邀参加。这次能接触到国内最优秀的架构师,学习他们的架构思想和行业经验。对我而言非常有意义。大会分为上下午共4场,我参加了上午的多云多活架构设计专场和下午的AIGC专场。本篇文章就多云多活架构设计专场,我选取几位老师的观点进行分享。(我并不是架构师,只是对架构感兴趣,如有错误,还请指正)原创 2024-03-19 14:02:39 · 1387 阅读 · 0 评论 -
将Abp默认事件总线改造为分布式事件总线
定义NotificationEventData,用于传递自定义事件。set;set;set;set;在消费者端,定义一个事件处理器,用于处理自定义事件。在生产者端,触发自定义事件。运行程序,可以看到消费者端打印出了自定义事件。原创 2023-12-20 17:06:27 · 1670 阅读 · 0 评论 -
怎样优雅地增删查改(九):按日期范围查询
使用数据库的创建时间作为查询依据,在Abp框架中,实体类实现ICreationAuditedObject接口,或继承CreationAuditedEntity类,使用仓储创建记录时将自动生成CreationTime。原创 2023-07-21 16:14:42 · 156 阅读 · 0 评论 -
怎样优雅地增删查改(八):按用户关系查询
查询目标业务对象HealthAlarm关联了业务用户HealthClient,因业务用户与鉴权用户IdentityUser共享同一个Id,因此可以通过查询用户关系关联的User,查询到业务对象。对于Relation服务,其依赖关系在应用层,查找指定用户的关系用户将在CurdAppServiceBase的子类实现。对于Relation服务,其依赖关系在应用层,查找指定用户的关系用户将在CurdAppServiceBase的子类实现。人员之间的关系是单项的,也就是说可以A是B的好友,但B不一定是A的好友。原创 2023-07-18 14:50:43 · 135 阅读 · 0 评论 -
怎样优雅地增删查改(七):按用户查询
若指定 UserId 为 Guid.Empty,则使用当前登录用户的 UserId。查询实体列表Dto若实现该接口,将筛选指定 UserId 下的关联的实体。ICurrentUser是Abp的一个服务,用于获取当前登录用户的信息。打开客户详情页面,点击“告警”标签页,可以看到该客户下的告警列表。告警创建完成后,进入客户管理,在右侧客户列表中点击“查看详情”在告警管理页面中,创建一些告警,并将这些告警分配给不同的客户。在不同“群组”下创建一些客户(Client)创建一些组织架构,命名“群组”原创 2023-07-18 10:36:35 · 135 阅读 · 0 评论 -
怎样优雅地增删查改(六):按任意字段关键字查询
定义按任意字段关键字查询过滤器(IKeywordOrientedFilter)接口,查询实体列表Dto若实现该接口,将筛选指定的目标字段(TargetFields)包含指定的关键字(Keyword)的实体。对于每一个TargetField,需要在实体中找到对应字段(属性)。若找到,则为此实体字段创建条件筛选的表达式,然后将这些表达式通过Or连接起来,最终返回一个包含多段关键字筛选的Lambda表达式。可以看到将筛选出标题包含关键字“3”的告警。在筛选中输入关键字“3”,点击查询。无需在应用层中更改代码,原创 2023-07-13 20:35:10 · 207 阅读 · 0 评论 -
怎样优雅地增删查改(五):按组织架构查询
要想在任意实体实现Where的过滤条件,我们使用动态拼接语言集成查询 (LINQ) 的方式实现通用查询接口,有关LINQ表达式,请阅读。定义按组织架构查询过滤器(IOrganizationOrientedFilter)接口,查询实体列表Dto若实现该接口,将筛选指定 OrganizationUnitId 下的用户关联的实体。Employee的集合查询业务,是通过重写CreateFilteredQueryAsync方法,来实现按组织架构查询的过滤条件。创建一些组织架构,命名“群组”原创 2023-07-13 11:08:03 · 3187 阅读 · 0 评论 -
怎样优雅地增删查改(四):创建通用查询基类
上一章我们实现了Employee管理模块,Employee的增删改查是通过其应用服务类,继承自Abp.Application.Services.CrudAppService实现的。在开发业务模块时,我们可以先使用简单的方式提供Curd服务,随着UI复杂度增加,逐步的使用更加复杂的Curd服务。为了更好的代码重用,我们对泛型参数进行扩展,使用CurdAppServiceBase的类可根据实际业务需求选择泛型参数。Brief是一种简化的查询实体集合的方法,其返回的Dto不包含导航属性,以减少数据传输量。原创 2023-07-13 10:43:42 · 215 阅读 · 0 评论 -
怎样优雅地增删查改(三):业务用户的增删查改
区别于身份管理模块(Identity模块)的鉴权用户IdentityUser,业务用户(BusinessUser)是围绕业务系统中“用户”这一定义的领域模型。这些业务用户继承自HealthUser,HealthUser是业务用户的基类,包含了业务用户的基本信息,如姓名,性别,出生日期,身份证号等。以Client为例,ClientLookupService是业务用户的查询服务,其基类UserLookupService定义了关联用户的查询接口,包括按ID查询,按用户名查询,按组织架构查询,按户关系查询等。原创 2023-07-10 11:07:43 · 502 阅读 · 0 评论 -
怎样优雅地增删查改(二):扩展身份管理模块
人员之间的关系是单项的,也就是说可以A是B的好友,但B不一定是A的好友。组织(OrganizationUnit)是身份管理模块的核心概念,组织是树形结构,组织之间存在父子关系。Abp为我们实现了一套身份管理模块,此模块包含用户管理、角色管理、组织管理、权限管理等功能。增加人员与组织架构管理接口,如添加/删除人员到组织架构,查询组织架构下的人员,查询未分配组织的人员等;身份管理模块(Identity模块)为通用查询接口的按组织架构查询和按户关系查询提供查询依据。原创 2023-07-07 18:58:04 · 811 阅读 · 0 评论 -
怎样优雅地增删查改(一):从0开始搭建Volo.Abp项目
软件系统中数据库或者持久层的基本操作功能可以用Curd描述,Curd即 增加(Create)、更新(Update)、读取查询(Retrieve)和删除(Delete), 这4个单词的首字母。在常见的业务系统中,对数据的大部分操作都是Curd,在实践的过程中对数据的筛选、排序、分页、关联查询等功能抽象和封装。本系列博文将从0开始,逐步搭建一个基于Volo.Abp + Vue 的前后端分离的,具有Curd通用查询功能的项目。项目介绍本项目是基于一个简单的用户健康数据管理系统,我们将对业务常用的查询功能进原创 2023-07-04 19:00:09 · 1079 阅读 · 0 评论 -
Volo.Abp升级小记(二)创建全新微服务模块
假设有一个按照搭建的微服务项目,并安装好了abp-cli。需要创建一个名为GDMK.CAH.Common的模块,并在模块中创建标签管理功能。原创 2023-06-09 14:37:37 · 1964 阅读 · 0 评论 -
[Volo.Abp升级笔记]使用旧版Api规则替换RESTful Api以兼容老程序
Volo.Abp 配置应用层自动生成Controller,增删查改服务(CrudAppService)将会以RESTful Api的方式生成对应的接口),这与旧版本的Abp区别很大。RESTful固然好,虽然项目里新的Api会逐步使用RESTful Api代替旧的,但在前后端分离的项目中已经定好的接口,往往需要兼容之前的方式。原创 2023-03-24 19:37:14 · 535 阅读 · 0 评论 -
[.Net]使用Soa库+Abp搭建微服务项目框架(五):服务发现和健康监测
[.Net]使用Soa库+Abp搭建微服务项目框架(五):路由发现和健康监测原创 2022-05-10 16:39:59 · 844 阅读 · 0 评论 -
[.Net]使用Soa库+Abp搭建微服务项目框架(四):动态代理和RPC
上一章我们完成了小项目的面向服务体系改造,你或许一直在思考一个问题。为什么要将业务独立成微服务?以一个健康医疗系统为例, 这个系统包含了用户模块,问卷的发放与填写,图表显示,报表生成与查看,患者管理等功能,传统的架构如下:随着项目规模的增长,在开发过程中会发现如下问题:各模块之间耦合严重,比如:报表模块引用了问卷,用户,随访,患者管理等几乎所有模块,难以维护 间接引用的情况过多,导致项目分层不明确,容易产生引用分歧,难以维护目前做的就是解耦各个模块之间的强关联状态,通过第一章提到的上下文原创 2021-10-19 18:16:47 · 635 阅读 · 2 评论 -
Soa: 一个轻量级的微服务库
Soa介绍一个轻量级的微服务库,基于.Net 6 + Abp框架 可快速地将现有项目改造成为面向服务体系结构,实现模块间松耦合。感谢RabbitTeam 的项目 RabbitCloudgrissomlau 的项目 jimu部分模块以及算法代码参考自以上项目特点:支持DotNetty和Http两种模式的RPC支持自动路由发现注册与微服务健康监测支持模块以及模块的依赖关系支持简单对象(POCO)作为参数或返回类型支持登录与鉴权支持多语言/本地化内容:基于Roslyn的动态客户原创 2022-05-18 15:37:50 · 319 阅读 · 0 评论 -
[.Net]使用Soa库+Abp搭建微服务项目框架(一):Abp与DDD相关知识回顾
在企业中大型项目中,随着业务的不断拓展,项目发展到一定程度,需要寻求项目的各模块解耦,独立成为微服务。如何实现呢?首先我们先来简单回顾一下Abp框架怎样实现(DDD)领域驱动设计的,Abp框架的全称是:Asp.Net Boilerplate Project(即Asp.Net 的样板项目),我们知道在领域驱动设计中,我们可以将整个系统分为四个大的层次,每一个层次都有其特定的功能,所以整个项目整体结构是非常清楚的。Eric Evans在《领域驱动设计-软件核心复杂性应对之道》这本书中提出了传统的四层架构原创 2021-10-18 18:23:42 · 1052 阅读 · 0 评论 -
[.Net]使用Soa库+Abp搭建微服务项目框架(二):面向服务体系的介绍
上一章我们建立了一个典型的面向领域设计的Abp小项目,如果按照常规的开发方式,会遇到什么问题呢?先来完善一下这个小项目,在定义好各实体类后,运行Miguration并向数据库里写入一些初始数据。现在整个项目的依赖引用图如下,每一个都有独立的引用路线,互不干涉。简略图如下假设现在有一个需求,MainService业务需要用到Service1和Service2 中的数据,如何操作?在使用Abp框架时,传统开发方式是先建立领域层服务,应用层中调用领域层服务(Manager)并返回给UI原创 2021-10-19 11:36:48 · 318 阅读 · 0 评论 -
[.Net]使用Soa库+Abp搭建微服务项目框架(三):项目改造
为什么要独立成服务?以一个健康医疗系统为例, 这个系统包含了用户模块,问卷的发放与填写,图表显示,报表生成与查看,患者管理等功能,传统的架构如下:随着项目规模的增长,在开发过程中会发现如下问题:各模块之间耦合严重,比如:报表模块引用了问卷,用户,随访,患者管理等几乎所有模块,难以维护 间接引用的情况过多,导致项目分层不明确,容易产生引用分歧,难以维护目前做的就是解耦各个模块之间的强关联状态,通过上一章提到的上下文边界划分方式,我们大致可以将系统的架构改造如下:通过调用者和实现者共原创 2021-10-19 16:57:40 · 325 阅读 · 0 评论