第 1 部分:介绍

本书的第一部分介绍了现代Web应用程序开发的挑战,并解释了ABP如何解决这些问题。它还展示了如何使用ABP框架创建一个新的解决方案,并创建一个完全可用的,生产就绪的页面来管理一个实体。最后,它探讨了EventHub项目,这是一个使用ABP框架构建的实际示例解决方案.

在这一部分中,我们将包括以下章节:

  • 第 1 章 现代软件开发与ABP框架
  • 第 2 章 ABP框架入门
  • 第 3 章 应用程序开发分步
  • 第 4 章 了解参考解决方案

构建软件系统一直很复杂。尤其是在当今时代,即使是基本的业务解决方案,也存在许多挑战。你经常发现自己在实现标准的非业务需求,并深入研究基础设施问题,而不是实现你的业务代码,而业务代码是你试图构建的系统中真正有价值的部分。

ABP框架通过提供强大的软件架构,自动化重复的细节,并提供必要的基础设施来帮助构建现代Web解决方案,帮助您专注于为利益相关者增加价值的代码.它提供了端到端、一致的开发体验,并提高了您的工作效率。ABP让您和您的团队快速掌握所有预先应用的现代软件开发最佳实践.

本书是遵循现代软件开发方法和最佳实践,使用ABP框架开发Web应用程序和系统的终极指南.

第一章介绍了构建架构良好的企业解决方案的挑战,并解释了ABP框架如何应对这些挑战。我还将解释本书的目的和结构。

在本章中,我们将介绍以下主题:

  • 开发企业 Web 解决方案的挑战
  • 了解ABP框架提供的内容

1.1 开发企业 Web 解决方案的挑战

在深入研究ABP框架之前, 我想介绍一下开发现代企业Web解决方案的挑战,以了解为什么我们需要像ABP框架这样的应用程序框架。让我们从大局开始:系统框架。

1.1.1 设置框架结构

在开始编写代码之前,需要为解决方案创建基础。这是构建软件系统最具挑战性的阶段之一。你有很多选择,需要做出一些基本的决定。您在此阶段做出的任何决定都可能影响应用程序的整个生命周期。

有一些常见的、众所周知的系统级架构模式,例如单体架构、模块化架构和微服务架构。应用这些体系结构之一决定了如何开发、部署和维护解决方案,并且应根据你的要求来决定。

除了这些系统级模式之外,命令和查询责任分离 (CQRS)、域驱动设计 (DDD)、分层体系结构和干净体系结构等软件开发模型还决定了代码库的形成方式。

确定体系结构后,应创建基本解决方案结构,以开始使用该体系结构进行开发。在此阶段,您还需要决定将使用哪种语言、框架、工具和库。

所有这些决策都需要丰富的经验,因此最好由经验丰富的软件架构师和开发人员完成。但是,并非所有团队成员都具有相同的经验和知识水平。您需要对他们进行培训并确定正确的编码标准。

在设置架构并准备基本解决方案后,您的团队可以开始开发过程。下一节将讨论每个软件解决方案重复的常见方面,以及如何避免在开发中重复这些方面。

1.1.2 不要重复自己!

不要重复自己 (DRY) 是软件开发的关键原则。计算机将现实世界的重复性任务自动化,使人们的生活更轻松。那幺,为什么我们在构建软件解决方案时要重复自己呢?

身份验证是每个软件解决方案都非常普遍的问题——单点登录、Active Directory 集成、基于令牌的身份验证、社交登录、双因素身份验证、忘记/重置密码、电子邮件激活等。这些要求中的大多数您都熟悉吗?你并不孤单!几乎所有软件项目都有或多或少类似的身份验证要求。与其从头开始构建所有这些,不如使用现有的解决方案,例如库或云服务。这种预先构建的解决方案已经成熟且经过实战考验,这对安全性非常重要。

一些非功能性要求(如异常处理、验证、授权、缓存、审核日志记录和数据库事务管理)是代码重复的其他来源。这些关注点称为横切关注点,应在每个 Web 请求中处理。在架构良好的软件解决方案中,这些问题应该由代码库中心位置的约定自动处理,或者您应该有服务使它们更易于实现。

当您集成到第三方系统(如 RabbitMQ 和 Redis)时,您通常希望围绕与这些系统交互的代码创建抽象和包装器。这样,您的业务逻辑就与这些基础结构组件隔离开来。此外,您不必在解决方案中的所有位置重复相同的连接、重试、异常处理和日志记录逻辑。

拥有预先构建的基础架构来自动执行这些重复性工作可以节省您的开发时间,以便您可以专注于业务逻辑。下一节将讨论另一个在每个业务应用程序中占用我们时间的主题——用户界面。

1.1.3 构建 UI 基础

应用程序的基本方面之一是其用户界面 (UI)。具有不时髦和不可用的 UI 的应用程序乍一看不会那幺有吸引力,即使它在引擎盖下具有出色的商业价值。

虽然每个应用程序的 UI 功能和要求各不相同,但一些基本结构是通用的。大多数应用程序都需要基本元素,例如警报、按钮、卡片、表单元素、选项卡和数据表。您可以使用 HTML/CSS 框架(例如 Bootstrap、Bulma 和 Ant Design),而不必为每个应用程序创建设计系统。

几乎每个 Web 应用程序都有一个响应式布局,其中包含主菜单、工具栏、页眉和页脚以及自定义颜色和品牌。您需要确定所有这些,并为应用程序的页面和组件实现一个基本的 UI 工具包。这样,UI 开发人员就可以创建一致的 UI,而无需处理通用结构。

到目前为止,我介绍了一些常见的基础设施要求,这些要求大多独立于任何业务应用程序。下一节将讨论大多数企业系统的常见业务需求。

1.1.4 实现常见的业务需求

虽然每个应用程序和系统都是独一无二的,它们的价值来自于这种独特性,但每个企业系统都有一些基本的支持要求。

基于权限的授权系统是这些基本要求之一。它用于控制应用程序的用户和客户端的权限。如果要自己实现,则应创建一个端到端解决方案,其中包含数据库表、授权逻辑、权限缓存、API 和 UI 页面,以便将这些权限分配给用户并在需要时进行检查。但是,这样的系统非常通用,可以开发为共享身份管理功能(可重用模块)并由多个应用程序使用。

与身份管理一样,许多系统需要审计日志报告、租户和订阅管理(用于 SaaS 应用程序)、文档上传和共享、多语言管理和时区管理等功能。除了预构建的应用程序功能(模块)之外,可能还有低级要求,例如实现软删除模式和在您的应用程序中存储二进制大对象 (BLOB) 数据。

所有这些常见要求都可以从头开始构建,这可能是某些企业系统的唯一解决方案。但是,如果这些功能不是您的应用程序提供的主要价值,您可以考虑使用预构建的模块和库(如果可用),并根据您的要求对其进行自定义。

在下一部分中,您将了解 ABP 框架如何帮助我们满足本节讨论的常见基础设施和基本要求。

1.2 了解 ABP 框架提供的功能

ABP 框架提供了一个有主见的架构,可帮助您在 .NET 和 ASP.NET Core 平台上构建具有最佳实践的企业软件解决方案。它提供了基本的基础架构、可用于生产的模块、主题、工具、指南和文档,以正确实现该架构并尽可能地自动化细节和重复工作。

在接下来的几个小节中,我将从架构开始解释 ABP 如何做到这一切。

1.2.1 ABP 架构

我提到 ABP 提供了一个有主见的架构。换句话说,它是一个有主见的框架。所以,我应该首先解释什么是无主见的框架,什么是有主见的框架。

正如我在设置架构部分中所述,为软件解决方案准备基础需要做出很多决定;您应该决定在解决方案中使用的系统架构、开发模型、技术、模式、工具和库。

无主见的框架(例如 ASP.NET Core)对这些决定没有太多说明,大部分都留给您自己决定。例如,您可以通过将 UI 层与数据访问层分离来创建分层解决方案,也可以通过直接从 UI 页面/视图访问数据库来创建单层解决方案。您可以使用任何库,只要它与 ASP.NET Core 兼容,并且可以应用任何架构模式。不固执己见使 ASP.NET Core 在不同场景中灵活可用。但是,它将责任分配给您,让您做出所有这些决定,设置正确的架构,并准备好实现该架构的基础架构。

我并不是说 ASP.NET Core 没有任何意见。它假设您正在基于 HTTP 规范构建 Web 应用程序或 API。它清楚地定义了应该如何开发您的 UI 和 API 层。它还提供了一些低级基础架构组件,例如依赖项注入、缓存和日志记录(事实上,这些组件可用于任何 .NET 应用程序,并不特定于 ASP.NET Core,但它们主要与 ASP.NET Core 一起开发)。但是,它并没有过多地说明您的业务代码是如何形成的以及您将使用哪些架构模式。

另一方面,ABP 框架是一个有主见的框架。它认为某些软件开发方法本质上更好,因此引导开发人员走上这些道路。它对您将在解决方案中使用的架构、模式、工具和库有自己的看法。尽管 ABP 框架足够灵活,可以使用不同的工具和库并更改您的架构决策,但遵循它的意见会让您获得最佳价值。但不用担心;它为常见架构提供了良好的、业界认可的解决方案,以帮助您构建具有最佳实践的可维护软件解决方案。它所做的决策将节省您的时间,提高您的工作效率,并让您专注于业务代码而不是基础设施问题。

在接下来的几节中,我将介绍 ABP 所依赖的四种基本架构。

领域驱动设计

ABP 的主要目标是提供一个模型,以使用干净的代码原则构建可维护的解决方案。ABP 提供基于 DDD 模式和实践的分层架构。它提供了一个分层的启动模板(请参阅启动模板部分)、必要的基础设施以及正确应用该架构的指导。

由于 ABP 是一个软件框架,因此它专注于 DDD 的技术实现。本书的第 3 部分“实现领域驱动设计”介绍了使用 ABP 框架构建基于 DDD 的解决方案的最佳实践。

模块化

在软件开发中,模块化是一种将系统拆分为独立部分(称为模块)的技术。最终目标是降低复杂性、提高可重用性,并使不同的团队能够并行处理不同的功能集而不会相互影响。

模块化有两个主要挑战,而 ABP 框架简化了这些挑战:

  • 第一个挑战是隔离模块。ASP.NET Core 具有一些功能(例如 Razor 组件库)来支持模块化应用程序。尽管如此,它仍然非常有限,因为它是一个没有主见的框架,只对 UI 和 API 部分有主见。另一方面,ABP 框架提供了一个一致的模型和基础架构,可以使用其数据库、域、应用程序和 UI 层构建完全独立、可重用的应用程序模块。
  • 模块化的第二个挑战是处理这些隔离模块如何在运行时进行通信并成为单个统一的应用程序。ABP为模块化系统的常见需求提供了具体的模型, 如在模块之间共享数据库, 通过事件或API调用在模块之间进行通信, 以及在应用程序中安装模块。

ABP提供了许多预构建的开源应用模块,可以在任何应用中使用。一些示例包括 Identity 模块(提供用户、角色和权限管理)和 Account 模块(为应用程序提供登录和注册页面)。重复使用和自定义这些模块可以节省您的时间。此外, ABP还提供了一个模块启动模板,帮助您构建可复用的应用模块。可以在第 15 章 “使用模块化”中找到这方面的一个示例。

模块化非常适合管理大型单页系统的复杂性。但是, ABP也可以帮助您创建微服务解决方案。

微服务

微服务和分布式架构是构建可扩展软件系统的公认方法。它允许不同的团队处理不同的服务,并独立版本、部署和扩展他们的服务。

然而,构建微服务系统在开发、部署、微服务间通信、数据一致性、监控等方面存在一些重要挑战。

微服务架构不是单个软件框架可以解决的问题。微服务系统是一种解决方案,它将许多不同的学科、方法、技术和工具结合在一起,以解决独特的问题。每个微服务系统都有其要求和限制。每个团队都有一定程度的专业知识、知识和技能。

ABP框架从一开始就被设计为与微服务兼容。它为具有事务支持的微服务之间的异步通信提供了分布式事件总线(如第 10 章 DDD – 域层的“发布域事件”部分所述)。它还提供了 C# 客户端代理,以便轻松使用远程服务的 REST API(如第 14 章 “构建 HTTP API 和实时服务”的“使用 HTTP API”部分所述)。

所有预构建的ABP应用模块都经过精心设计,可以转换为微服务.ABP还提供了详细的指南(https://docs.abp.io/en/abp/latest/Best-Practices/Index) 来解释如何创建这样的微服务兼容模块。这样,您可以从模块化单页开始,然后稍后将其转换为微服务解决方案。

ABP核心团队准备了一个使用ABP框架构建的开源微服务参考解决方案.它演示了如何使用 API 网关、微服务间通信、分布式事件、分布式缓存、多个数据库提供程序和多个 UI 应用程序进行单点登录创建解决方案。它还包括用于在容器上运行解决方案的 Kubernetes 和 Helm 配置。请参阅 https://github.com/abpframework/eShopOnAbp 以了解有关该解决方案的所有详细信息。

下一节将介绍ABP框架提供的最后一个开箱即用的基本架构 - 多租户.

SaaS/多租户

软件即服务 (SaaS) 是构建和销售软件产品的一种流行方法。多租户是构建 SaaS 系统的一种广泛使用的架构模式。以下是多租户系统的典型功能:

  • 在租户之间共享硬件和软件资源。
  • 每个租户都有用户、角色和权限。
  • 在租户之间隔离数据库、缓存和其他资源。
  • 可以启用/禁用每个租户的应用程序功能。
  • 可以自定义每个租户的应用程序配置。

ABP框架涵盖了所有这些要求以及更多要求.它可以帮助您构建多租户系统,而大多数代码库都不知道多租户。

第16章, 实施多租户, 解释使用ABP框架进行多租户和多租户应用程序开发。

到目前为止,我已经介绍了ABP作为预构建解决方案提供的基本架构模式。但是,ABP也提供了启动模板,以帮助您轻松开始使用新的解决方案。

1.2.2 启动模板

当您使用 ASP.NET Core 的标准启动模板创建新解决方案时,您将获得一个具有最小依赖项且没有层的单项目解决方案,这不太适合生产。您通常会花费大量时间来设置解决方案结构以正确实现软件架构,以及安装和配置基本工具和库。

ABP框架提供了一个架构良好、分层、预配置和生产就绪的启动解决方案模板.以下屏幕截图显示了直接运行使用ABP框架创建的启动模板时的初始UI:

图1.1 — ABP应用程序启动模板

让我们更详细地谈谈这个启动模板:

  • 解决方案是分层的。它很清楚,并告诉您如何组织代码库。
  • 一些预构建的模块已经安装,例如帐户和身份模块。您已经实现了登录、注册、用户和角色管理以及其他一些标准功能。
  • 单元测试和集成测试项目已预先配置,可以编写您的第一个测试代码。
  • 它包含一些实用程序应用程序,用于管理数据库迁移以及使用和测试 HTTP API。
  • ABP的应用程序启动模板带有UI框架和数据库提供程序的多个选项。

可以从 Angular、Blazor 或 MVC (Razor Pages) 选项作为 UI 框架开始,并使用 Entity Framework Core(与任何数据库管理系统一起)或 MongoDB 作为数据库提供程序。您将在第 2 章 ABP 框架入门中学习如何创建新的解决方案并运行它。

在下一节中,我将介绍ABP的一些基础设施组件。

1.2.3 ABP 基础架构

ABP 基于您已经了解的熟悉工具和库。虽然它是一个全栈应用程序框架,但它并没有引入新的对象关系映射器 (ORM),而是使用 Entity Framework Core。同样,它使用 Serilog、AutoMapper、IdentityServer 和 Bootstrap,而不是自己创建类似的功能。它提供了一个集成这些工具、填补空白并实现常见业务应用程序需求的解决方案。

ABP 框架通过按约定自动化并允许您在需要时进行精细控制,简化了异常处理、验证、授权、缓存、审计日志记录和数据库事务管理。因此,您不必为这些交叉和常见问题重复工作。

ABP 与 IdentityServer 很好地集成,用于基于 cookie 和令牌的身份验证以及单点登录。它还提供了一个详细的基于权限的授权系统,以帮助您控制应用程序用户和客户端的权限。

除了基本功能外,后台作业、BLOB 存储、文本模板、审计日志和本地化组件还为常见业务需求提供了内置解决方案。

在 UI 部分,ABP 提供了一个完整的 UI 主题系统,可帮助您开发不了解主题的模块化应用程序,并轻松为应用程序安装主题。它还在 UI 方面提供了大量功能和帮助程序,以消除重复代码并提高生产力。

下一节将讨论社区,这对于开源项目很重要。

1.2.4 社区

当您在公司中设置解决方案架构时,除了从事该架构的开发人员之外,没有人知道您的架构。但是,ABP 拥有庞大而活跃的社区。他们使用相同的架构和基础架构,应用类似的最佳实践,并以类似的方式开发他们的应用程序。当您遇到基础架构问题或想要获得实现业务问题的想法或建议时,这具有很大的优势。由于 ABP 开发人员正在应用相同或相似的模式,因此理解另一个解决方案中某人的代码也更容易。

ABP 框架自 2016 年以来一直存在并不断发展。截至 2021 年底,它在 GitHub 上拥有 7,000 个星标、220 个贡献者、22,000 次提交、5,700 个已解决的问题,在 NuGet 上的下载量超过 4,000,000 次,有超过 110 个主要和次要版本。我的意思是,它是一个成熟、被接受和值得信赖的开源项目。

ABP核心团队和社区的贡献者不断撰写文章,准备视频教程,并在ABP社区网站上分享:https://community.abp.io。以下截图摘自ABP社区网站:

图 1.2 – ABP 社区网站

查看ABP社区网站,了解其他人在ABP框架上做什么,并密切关注ABP框架的发展。

1.3 总结

在本章中,我们介绍了构建业务解决方案的问题,并解释了ABP如何为这些常见问题提供解决方案。ABP还通过提供预构建的架构解决方案和实现该架构所需的基础设施来提高开发人员的工作效率。

在本书结束时,您将熟悉ABP框架,并将学习许多有关企业软件开发的最佳实践和技术。

在下一章中, 您将学习如何使用 ABP 的命令行界面 (CLI) 工具创建新的解决方案并在您的开发环境中运行它.

 

posted on 2024-06-06 17:23  生活的倒影  阅读(40)  评论(0编辑  收藏  举报