惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
NISL@THU
NISL@THU
T
Threat Research - Cisco Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
Lohrmann on Cybersecurity
V
Visual Studio Blog
Cyberwarzone
Cyberwarzone
D
Docker
The Hacker News
The Hacker News
C
CERT Recently Published Vulnerability Notes
Vercel News
Vercel News
Project Zero
Project Zero
S
Schneier on Security
aimingoo的专栏
aimingoo的专栏
I
Intezer
腾讯CDC
M
MIT News - Artificial intelligence
Hugging Face - Blog
Hugging Face - Blog
P
Palo Alto Networks Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
AWS News Blog
AWS News Blog
GbyAI
GbyAI
MongoDB | Blog
MongoDB | Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Vulnerabilities – Threatpost
G
Google Developers Blog
N
Netflix TechBlog - Medium
The Cloudflare Blog
Microsoft Security Blog
Microsoft Security Blog
Y
Y Combinator Blog
A
Arctic Wolf
S
Securelist
酷 壳 – CoolShell
酷 壳 – CoolShell
Cisco Talos Blog
Cisco Talos Blog
Recent Announcements
Recent Announcements
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 热门话题
T
Threatpost
Latest news
Latest news
Blog — PlanetScale
Blog — PlanetScale
Security Latest
Security Latest
Engineering at Meta
Engineering at Meta
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
The GitHub Blog
The GitHub Blog
T
Tor Project blog
P
Proofpoint News Feed

博客园 - 12不懂3

IOC容器 分布式锁 分布式事务 Myql索引篇+c#性能优化篇 jwt验证机制 HttpHelper .net7.0 .net升级7.0报错1. MySqlConnection is already in use. See https://fl.vu/mysql-conn-reuse 2.SqlSugar.SqlSugarException: Cannot Open when State is Connecting. 3.The current TransactScope is already complete Windos Elastocsearch安装部署汉化 Mysql ElasticSearch C# Common中心目录 ABP.VNET 原书籍《Effective C#:改善C#代码的50个有效方法》 精炼18点 IO读写+Epoll多路复用,计算机底层解析 c# 技术点总结 kuberspere管理工具+k8s安装 K8s核心组件理解 数据库事务和锁
ABP
12不懂3 · 2022-08-16 · via 博客园 - 12不懂3

1.ABP框架源的理论依据:DDD,领域驱动设计 有以下几点: DTO DomainService, LocalEvent, Respository

2.领域>高内聚低耦合,领域的拆分不只是类,而是领域=根据业务来确定多个紧密联系的实体来组成同一个领域,+领域里面的验证+逻辑

3.所以,后续访问只能通过领域访问,而不是直接实体接口 

4例子:用户 角色 菜单可合成一个领域也可拆分成三个,再加上日志 三个都需要,所以具体的领域划分还得看自身,不过通常由有大规则

5.领域拆分2个原则:1.大部分的聚合根是没有子集合的,如果子集合超过200就要继续拆 2.保持聚合根要小  如用户劫色菜单领域,查个角色,发现用户查出来几十万,这是不行的

6.Domian有以下: 1.实体Entity有主键。2.值对象无主键 如火警多人报警同一个地方,是以地址为自身只需要出警一次的

7.要访问Entity,也只能通过聚合根。

因为领域包含多个规则,直接访问会破坏指定的规则,而在c#里面领域又是一个虚拟的概念,所在领域在c#代码里面的表现就是 通过增加接口表示+泛型约束进行领域划分保护 限制增删改查,来保护业务规则

8.领域的具体分析

如一个名字:名字不能为空的规则写在Doain,名字不能重复,卸载DomainService

所以用户发起一个请求,返回的时候 从Domain返回的是Entity   返回给Appliocation 也是Entity 返回给用户的就是DTO

举例:一个资金转账的动作   应用层:相当于控制器,组装数据,不写业务逻辑, 领域层:业务逻辑,各种验证, 基础设施:就是公用的如发邮件

9.领域事件

一个操作可能要做额外的动作,或者出发一系列的后续动作--观察者模式 用来解耦

程序内部的事件总线

 分布式事件总线:通过RabbitMQ

10.仓储模式:建立规则,

 11.单元作业UnitOrWork

保证十五-本地事务,分布式事务

 

 12.拓扑排序:ABP依赖太多,所以加载依赖需要一种算法:拓扑排序

拓扑排序的前提是有向无环(意思就是依赖里面没有互相依赖的否则会死循环) 算法两种选择:广度优先Or深度优先

-依次找到没有任何依赖的类,然后除掉,直至最后

ABP把所有的依赖都找出来,放在栈里面,然后进行拓扑排序,再依次加载依赖

13.ABP模块化架构