一、ABP.vNext 项目结构
总体架构
-
所有应用服务、API网关、身份认证服务均部署在Kubernetes容器中,由Kubernetes提供应用配置、服务治理、服务监控等功能。
-
客户端所有访问均通过Kubernetes的Nginx-Ingress接入服务集群,并由API网关负责路由匹配和身份认证后转发至相应的应用服务处理。应用微服务中不需要二次做身份认证。
-
身份认证服务用户登录、验证的相关接口。所有请求只在网关做身份认证,下层服务不需要做二次身份认证。
-
数据库、缓存、日志服务等服务建议部署于独立的服务器上,按需求也可以部署于容器中。
具体架构如下图:
分层架构
这里我们主要讲述服务端,服务分层架构如下:
网关层作为业务服务的总出入口,所有服务调用均需要通过API网关。这里我们使用.Net Core中常用的Ocelot网关
身份认证服务我们采用ABP vNext框架模板提供的身份服务模块,其核心为封装了IdentityServer4.0框架用于提供OAuth2.0协议各种接口。身份认证服务所需数据直接来自数据库或缓存。
聚合服务层主要用于聚合、调度服务层一个或多个微服务。客户端访问的所有接口(除身份认证服务接口以外)均由聚合服务层提供。应用层服务不直接访问数据库,而是通过调用服务层对应服务实现数据操作。通常我们做详细的接口权限管理,也是应用层接口与权限做对应。应用层服务我们采用WebApi+ABP vNext框架实现。
基础服务层,建议依据领域驱动设计思想划分,每个领域设计为一个微服务。该层服务提供具体的领域模型、领域业务的实现。通常每个微服务对应一个数据库,通过仓储实现数据库操作。基础服务层服务不直接提供客户端访问接口,收到请求时也不需要做身份认证、鉴权处理。这里我把基础服务层服务分为两类:第一种是身份管理服务,负责用户角色权限管理,使用ABP vNext框架Application模板构建;第二种是其他业务微服务,提供用户角色权限管理以外的其他业务功能,使用ABP vNext框架Module模式构建。
数据库这里我们采用MySQL、缓存这里采用Redis、日志服务采用Elasticsearch+Logstash+Kibana(ELK)。
具体服务图中服务划分以Demo为例,实际开发中请依据各自项目实际需求对服务进行拆分设计。
由于Demo中设计的应用场景相对简单,更多技术及ABP框架详细用法请参考ABP官方文档。
ABP分层
Domain
Domain(领域) 划分为两个项目,Domain.Share 和 Domain
Domain.Share :包含常量,枚举和其他类型, 它不能包含实体,存储库,域服务或任何其他业务对象. 可以安全地与模块中的所有层使用. 此包也可以与第三方客户端使用.
Domain: 包含实体, 仓储接口,领域服务接口及其实现和其他领域对象. Domain 包依赖于 Domain.Shared 包.
Application
Application(应用服务) 划分为两个项目 Application.Contracts 和 Application
Application.Contracts:包含应用服务接口和相关的数据传输对象(DTO). Application contract 包依赖于 Domain.Shared 包
Application:包含应用服务实现. Application 包依赖于 Domain 包和 Application.Contracts 包
Infrastructure
Infrastructure(基础设施) 为每个orm/数据库集成创建一个独立的集成包, 比如Entity Framework Core 和 MongoDB.
EntiryFrameworkCore 依赖 Domain ,映射 Domain 对象(实体和值类型)到数据库表 (ORM)并实现在 Domain 中定义的仓储接⼝。
HTTP
- 为模块开发REST风格的HTTP API,
- 为每个应用服务创建一个Controller (通常通过实现其接口). 这些控制器使用应用服务接口来委托操作. 它根据需要配置路由, HTTP方法和其他与Web相关的东西.
- HTTP API 包只依赖于 Application.Contracts 包. 不要依赖 Application 包,
- 创建一个为HTTP API包提供客户端服务的HTTP API Client包,这些客户端服务将应用服务接口实现远程端点的客户端.HTTP API Client 包仅依赖于 Application.Contracts 包 使用ABP框架提供的动态代理HTTP C#客户端的功能.
Web
包含页面,视图,脚本,样式,图像和其他UI组件,Web 包仅依赖于 HttpApi 包
ABP框架遵循DDD原则和模式去实现分层应用程序模型,该模型由四个基本层组成:
- 表示层: 为用户提供接口. 使用应用层实现与用户交互.
- 应用层: 表示层与领域层的中介,编排业务对象执行特定的应用程序任务. 使用应用程序逻辑实现用例.
- 领域层: 包含业务对象以及业务规则. 是应用程序的核心.
- 基础设施层: 提供通用的技术功能,支持更高的层,主要使用第三方类库.
本文来自博客园,作者:{春光牛牛,yak},转载请注明原文链接:https://www.cnblogs.com/yakniu/p/16414456.html