- 本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、如何获取Abp模板
1. 可以通过Abp Cli脚手架运行。
2. 可以通过Abp官网直接创建工程。
二、领域驱动设计(DDD:Domain-Driven Design)
领域驱动设计(DDD): 是一种通过将实现连接到持续进化的模型来满足复杂需求的软件开发方法
领域驱动设计的前提是:
把项目的主要重点放在核心领域和领域逻辑上把复杂的设计放在领域模型上发起技术专家和领域专家之间的创造性协作,以迭代方式完善解决特定领域问题的概念模型
总结:业务的演变导致软件系统越来越复杂,而DDD就是为了解决快速变化、复杂系统的设计性问题的。此文不做过多的赘述,感兴趣的可以阅读相关书籍、文章,也许能引发你对软件设计的一些感想。
三、解读项目结构
ABP框架遵循DDD原则和模式去实现分层应用程序模型,该模型由四个基本层组成:
- 领域层: 包含业务对象以及业务规则. 是应用程序的核心.
- 应用层: 表示层与领域层的中介,编排业务对象执行特定的应用程序任务. 使用应用程序逻辑实现用例.
- 表示层: 为用户提供接口. 使用应用层实现与用户交互.
- 基础设施层: 提供通用的技术功能,支持更高的层,主要使用第三方类库.
在整洁架构中,每层只依赖内部的层,独立的层在最中心,也就是领域层.
领域层
.Doamin是领域层中必需的,它包含之前介绍的构建组成(实体,值对象,领域服务,规约,仓储接口等).
.Domain.Shared是领域层中很薄的项目,它只包含领域层与其它层共享的数据类型的定义.例如,枚举,常量等.
应用层
.Application.Contracts包含接口的定义及接口依赖的DTO,此项目可以被展现层或其它客户端应用程序引用.
.Application是应用层中必需的,它实现了Application.Contracts项目中定义的接口.
展现层
.Web是一个ASP.NET Core MVC / Razor Pages应用程序.它是提供UI元素及API服务的可执行程序.
基础设施层
.EntityFrameworkCore集成EF Core,数据库对象映射,仓储接口的实现,以及其它与EF Core相关的内容都位于此项目中.
.DbMigrations是管理Code First方式数据库迁移记录的特殊项目.
对于默认创建的项目是没有.HttpApi.Host以及.IdentityServer
- 分层项目会将Web与Api分开,.HttpApi.Host主要是承载解决方案API的应用程序
- .IdentityServer主要是用于其他项目的身份验证服务器,获取当前用户身份和访问令牌. 然后使用访问令牌调用HtypApi服务器
- .HttpApi项目主要是用于定义Api控制器(Abp动态Api功能会自动生成控制器,如果需要额外定义HttpApi可以在这个模块)
- .HttpApi.Client用于客户端应用程序需要调用.HttpApi的API时,这个项目非常有用.客户端程序仅需引用此项目就可以通过依赖注入方式,远程调用应用服务.它是通过ABP框架的动态C#客户端API代理系统来实现的.
项目组织在
src和test和host文件夹中:
- src文件夹包含基于DDD原则分层的实际模块.
- test文件夹包含单元和集成测试.
- host文件夹包含具有不同配置的应用程序,用于演示在应用程序中如何托管模块. 这些不是模块的一部分,但开发时会很有用.
切黄瓜本是一件比较小的事情,如果使用切割机那么就让事情变得不简单。对于简单的业务系统,就直接简单清晰的架构、设计就能解决,如果把简单的问题复杂化,就违背了设计原则