在本文中,您会看到一个Web API应用的模板,在.NET Core 中应用了六边形架构,并且里面包含了一些基础功能。

介绍

这是一个模板项目,里面集成了一些必备的基础功能,当我们需要开发一个新项目时,我们可以使用这个模板,这样我们可以聚焦业务。

模板集成了一些组件和功能如下:

  • 六边形架构的应用程序
  • Web API
  • Entityframework Core
  • 异常处理
  • NUnit
  • 版多本
  • Swagger UI
  • 日志 — SeriLog
  • Health checks UI
  • JWT authentication

什么是六边形架构

六边形架构(或称其为“端口和适配器架构风格”),将解决传统架构中维护应用程序的问题,而我们过去通常通过以数据库为中心的架构来实现, 所有输入和输出都通过端口进入或离开应用程序的核心内容,并且端口把应用程序和外部技术,工具和交付机制隔离开。

六边形架构带来了哪些好处

  • 插件化

    我们可以在项目中添加或者移除adapter, 比如我们可以替换 Rest adapter 或者 GraphQL 或者 gRPC adapter,并且它不会影响到我们的逻辑。

  • 可测试的能力

    因为它分离了所有层,所以很容易为每个组件编写一个测试用例。

  • 与数据库无关

    由于数据库与数据访问是分开的,因此切换数据库提供程序非常容易。

  • 整洁的代码

    由于业务逻辑和表示层是分开的,因此易于实现UI(例如React,Angular或Blazor)。

六边形架构的各层

  • Domain Api layer

Domain Api layer 在中心实现,并且不依赖于其他层。

  • Domain Layers (业务逻辑层)

  • Rest Adapter layer

Rest Adapter也称为左端口适配器和主适配器,在其中我们实现了静态服务(即GET,POST,PUT,DELETE等)。

  • Persistence Adapter layer

    Persistence Adapter,也称为辅助适配器,我们用了Entity Framework Core,DbContext将是UOW(工作单元)。

  • Bootstrap/Presentation Layer

开始使用六边形架构

首先,我们需要先安装一个模板插件,在VS中,选择 扩展 -> 联机,然后搜索 Hexagonal,并安装

然后选择模板,创建新项目:

它的解决方案是这样的:

您可以浏览下各层的代码结构,也可以启动项目,访问 /healthcheck-ui, 查看健康检查的页面

在本文中,我简单介绍了六角形体系结构,并且通过这个模板,可以快速的在.NET Core 中创建六边形架构的项目应用。

原文链接: https://www.c-sharpcorner.com/article/hexagonal-architecture-in-asp-net-core/

欢迎扫码关注我们的公众号 【全球技术精选】,专注国外优秀博客的翻译和开源项目分享,也可以添加QQ群 897216102

在 .NET Core 中应用六边形架构的更多相关文章

  1. 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获

    项目开发中的一些注意事项以及技巧总结   1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...

  2. ASP.NET Core 中文文档 第二章 指南(4.6)Controller 方法与视图

    原文:Controller methods and views 作者:Rick Anderson 翻译:谢炀(Kiler) 校对:孟帅洋(书缘) .张仁建(第二年.夏) .许登洋(Seay) .姚阿勇 ...

  3. ASP.NET Core 中文文档 第二章 指南 (09) 使用 Swagger 生成 ASP.NET Web API 在线帮助测试文档

    原文:ASP.NET Web API Help Pages using Swagger 作者:Shayne Boyer 翻译:谢炀(kiler) 翻译:许登洋(Seay) 对于开发人员来说,构建一个消 ...

  4. ASP.NET Core 中文文档 第三章 原理(6)全球化与本地化

    原文:Globalization and localization 作者:Rick Anderson.Damien Bowden.Bart Calixto.Nadeem Afana 翻译:谢炀(Kil ...

  5. IDDD 实现领域驱动设计-SOA、REST 和六边形架构

    上一篇:<IDDD 实现领域驱动设计-架构之经典分层> 阅读目录: SOA-面向服务架构 REST 与 RESTful 资源(Resources) 状态(State) 六边形架构 DDD ...

  6. 在.NET Core中使用MEF

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:微软的可托管扩展框架也移植到.NET Core上了. 可托管扩展框架(Managed ...

  7. 在Android应用中使用Clean架构

    自从开始开发安卓应用,我一直感觉我可以做得更好.我看过不少烂代码,其中当然有我写的.安卓系统的复杂性加上烂代码势必酿成灾祸,所以从错误中成长就很重要.我Google了如何更好地开发应用,发现了这个叫做 ...

  8. SOA、REST 和六边形架构

    SOA.REST 和六边形架构 上一篇:<IDDD 实现领域驱动设计-架构之经典分层> 阅读目录: SOA-面向服务架构 REST 与 RESTful 资源(Resources) 状态(S ...

  9. 在ASP.NET Core中使用Apworks快速开发数据服务

    不少关注我博客的朋友都知道我在2009年左右开发过一个名为Apworks的企业级应用程序开发框架,旨在为分布式企业系统软件开发提供面向领域驱动(DDD)的框架级别的解决方案,并对多种系统架构风格提供支 ...

随机推荐

  1. 【noi 2.6_8786】方格取数(DP)

    题意:N*N的方格图每格有一个数值,要求从左上角每步往右或往下走到右下角,问走2次的最大和. 解法:走一次的很好想,而走2次,不可误以为先找到最大和的路,再找剩下的最大和的路就是正解.而应该认清动态规 ...

  2. 病毒侵袭 HDU - 2896 板子题

    当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻....在这样的时刻,人们却异常兴奋--我们能在有生之年看到500年一遇的世界奇观,那是多么幸福的事儿啊~~ 但网路上总有那么些网站,开 ...

  3. [Golang]-4 错误处理、Panic、Defer

    目录 错误和异常 案例 Panic Defer 使用 defer+recover 来处理错误 参考文章: Go 语言使用一个独立的·明确的返回值来传递错误信息的.这与使用异常的 Java 和 Ruby ...

  4. Zabbix 监控网站

    官网教学步骤 配置 Web 监控 创建 Web 场景 配置 Web 场景 配置 Web 监控步骤 一共划分为 5 个步骤: 监测访问登录页面 模拟登录功能 # sid 变量的值 regex:name= ...

  5. test markdown && 代码高亮

    #include<cstdio> #include<cstring> #include<queue> #include<vector> #include ...

  6. certbot 获取数字证书失效问题

    title: certbot 获取数字证书失效问题 author: Narule date: 2021-02-18 10:45:00 +0800 categories: [Technology^技术, ...

  7. Web 开发之 HTTP/2 & SPDY & HTTP 1.1 & HTTP 对比分析详解!

    1 https://zh.wikipedia.org/wiki/HTTP/2 HTTP/2 维基百科,自由的百科全书                         HTTP/2(超文本传输协议第2版 ...

  8. git cli all in one

    git cli all in one https://www.atlassian.com/git/tutorials/learn-git-with-bitbucket-cloud git create ...

  9. ORM & sequelize

    ORM Object Relational Mapping 对象关系映射 Table => Object, 简化 SQL 查询命令的编写 https://en.wikipedia.org/wik ...

  10. SVG & getBBox

    SVG & getBBox https://developer.mozilla.org/en-US/docs/Web/API/SVGGraphicsElement/getBBox const ...