首页 > 其他分享 >推荐.Net 必须学习的几个库

推荐.Net 必须学习的几个库

时间:2023-11-13 22:33:25浏览次数:24  
标签:框架 推荐 应用程序 学习 JSON API Net NET 日志

实体框架(Entity Framework)

实体框架(EF)是微软为 .NET 应用程序提供的主要数据访问技术,它提供了一个对象关系映射器(ORM),使得 .NET 开发者可以使用 .NET 对象来操作数据库。EF 通过将复杂的 SQL 查询抽象为 .NET 对象集合来简化数据库操作。EF 的关键功能包括:

  • 通过配置将 .NET 类映射到数据库表。
  • 自动生成用于创建、查询、更新和删除数据的 SQL。
  • 更改跟踪:EF 跟踪对实体对象所做的更改并将这些更改持久化到数据库。
  • 延迟加载:在访问时,相关实体可以从数据库自动加载。
  • 缓存:缓存查询结果以优化性能。
  • 迁移:允许创建和部署增量数据库更改。
    对于需要在关系数据库中持久化数据的 .NET 应用程序,实体框架是用于抽象数据访问的首选库。通过几个主要版本的改进和优化,大多数 .NET 开发者都会在某些时候使用 EF。

.NET 日志框架

日志记录对于在应用程序运行时输出诊断信息至关重要。.NET 提供了多个日志框架,简化了添加日志记录功能。两个最受欢迎的选项是:

  • Serilog:.NET 社区更喜欢的第三方框架。非常灵活,创建结构化日志数据,并与许多接收器(文件、数据库等)集成。具有干净的流畅 API。
  • Microsoft.Extensions.Logging:Microsoft 提供的内置日志库,包含在 ASP.NET Core 中。通过 DI 容器与许多 .NET 类集成。支持日志范围。比 Serilog 更基本,但在 ASP.NET Core应用程序中更容易直接使用。

除了 NLog 和 log4net 等其他流行的日志库在 .NET 领域也被广泛使用外,Serilog 和 Microsoft.Extensions.Logging 是大多数场景的不错选择。

Newtonsoft Json.NET

JSON 是用于 Web API 和其他集成的普遍数据交换格式。Json.NET 是用于在 .NET 代码中处理 JSON 的领先库,提供以下关键特性:

  • 将对象序列化/反序列化为/从 JSON。
  • 用于解析 JSON 的 LINQ 风格查询 API。
  • 处理常见 JSON 情况,如缺失数据和缓存。
  • 用于控制序列化的丰富配置选项。
  • 高性能。
    尽管微软为 JSON 处理提供了 System.Text.Json,但许多开发者仍然更喜欢 Json.NET,因为它的成熟和功能集。Json.NET 对于任何 API 开发都是必备工具。

xUnit

xUnit 是 .NET 开发者最喜欢的测试框架。它为针对 .NET 代码创建单元测试提供了流畅的 API。功能包括:

  • 用于装饰测试方法的属性(Fact,Theory 等)。
  • 用于验证逻辑的断言。
  • 与 Moq 等模拟框架良好集成。
  • 可扩展性以实现自定义断言。
  • 并行执行测试以提高效率。
    虽然还有其他测试框架如 NUnit 和 MSTest 也在使用,但 xUnit 通常是当前最受欢迎的选择。使用 xUnit 编写单元测试对于任何认真的 .NET 项目都是至关重要的。

AutoMapper

AutoMapper 对于具有分层架构的企业应用程序非常有用,因为它简化了在面向对象代码中的模型类型之间的转换,例如在业务逻辑中使用的域模型对象和 API 中使用的数据传输对象。AutoMapper 提供以下功能:

  • 通过配置在不同对象类型之间映射。
  • 处理嵌套对象转换。
  • 将映射逻辑注入服务/存储库。
  • 自动生成解析代码。
    AutoMapper 节省了大量手动编写解析代码的时间。

FluentValidation

验证用户输入对于任何应用程序至关重要。FluentValidation 为 .NET 类使用流畅的接口和 lambda 表达式声明验证逻辑提供了一种简洁的方法。例如:

public class PersonValidator : AbstractValidator<Person> {
  public PersonValidator() {
    RuleFor(x => x.Name).NotEmpty();
    RuleFor(x => x.Age).InclusiveBetween(0, 120);
  }
}

其他功能包括:

  • 自定义验证方法。
  • 属性和对象级别验证。
  • 支持异步/IObservable。
  • 本地化。
  • 可扩展性和可插拔性。
    FluentValidation 将杂乱的验证代码抽象为清晰的格式,对于验证命令、请求 DTO、业务对象等非常有用。

Polly

Polly 是一个 .NET 弹性和瞬态故障处理库,允许开发者表达诸如重试、断路器、超时等策略。例如:

var policy = Policy.Handle<HttpResponseException>()
  .Retry(3);
policy.Execute(() => CallHttpService());

关键特性:

  • 用于弹性策略的流畅 API。
  • 处理诸如网络问题和超时等错误。
  • 可包装对不可靠服务的调用。
  • 适用于实施弹性模式。
  • 可插拔和可扩展的架构。
    在分布式系统中,服务可能会随机失败,Polly 则易于实施弹性最佳实践,因此至关重要。

MediatR

MediatR 是一种实现 .NET 应用程序中中介器模式的流行库。它促进了关注点的清晰分离,提高了代码的可维护性和可测试性。主要特性包括:

  • 将请求处理程序与其他代码解耦。
  • 支持请求/响应和通知模式。
  • 鼓励单一职责原则。
  • 通过减少依赖来简化应用程序架构。
  • 便于进行更容易的测试和重构。
    对于希望使用最佳实践构建可扩展和可维护应用程序的开发人员,强烈推荐使用 MediatR。

标签:框架,推荐,应用程序,学习,JSON,API,Net,NET,日志
From: https://www.cnblogs.com/MrChuJiu/p/17830464.html

相关文章

  • .NET快速对接极光消息推送
    什么是消息推送?很多手机APP会不定时的给用户推送消息,例如一些新闻APP会给用户推送用户可能感兴趣的新闻,或者APP有更新了,会给用户推送是否选择更新的消息等等,这就是所谓的“消息推送”。更多APP消息推送的介绍可查阅该篇文章:十分钟带你了解APP消息推送(Push)......
  • 《信息安全系统设计与实现》第十一周学习笔记
    第十二章块设备I/O和缓冲区管理块设备I/O缓冲区I/O缓冲的基本原理非常简单。文件系统使用一系列I/O缓冲区作为块设备的缓存内存。当进程试图读取(dev,blk)标识的磁盘块时。它首先在缓冲区缓存中搜索分配给磁盘块的缓冲区。如果该缓冲区存在并且包含有效数据、那么它只需从缓冲区中......
  • 学习随笔(设计模式:面向对象原则)
    内容今天学习了面向对象的几种设计思想原则,之前一直是C开发,所以面向过程的思想比较严重。面向对象的四个好处:可维护好、可拓展性好、可复用性好、灵活性好。收获1.单一职责原则:封装一个类,职责应该单一,仅有一个以其它变换的原因,所以要做好类的职责分离。2.开放-封闭原则:软件实......
  • Azure DevOps 发布.Net项目到Windows IIS站点之通过公网IP(账号、密码)
    在AzureDevOps中通过指定公网IP发布代码到指定目录#ASP.NETCore(.NETCore7.0)#BuildandtestASP.NETCoreprojectstargeting.NETCore7.0.#Addstepsthatpublishsymbols,savebuildartifacts,andmore:#https://docs.microsoft.com/azure/devops/pipeli......
  • Azure DevOps 发布.Net项目到Windows IIS站点之Azure项目发布内网VM
    当你有一个需求,需要通过AzureDevOps发布到一个没有公网的VM的时候,你将需要使用以下脚本trigger:-masterpool:vmImage:'windows-2022'variables:-name:Build.ArtifactStagingDirectoryvalue:'$(Build.Repository.LocalPath)\artifacts'-name:buildConf......
  • 【Azure Storage Blob】如何通过.NET Azure Storage Blobs SDK获取到Blob的MD5值呢?
    问题描述通过.NETAzureStorageBlobsSDK,获取Blob的MD5值,查看了Azure操作手册中,介绍可以使用 blob.Properties.ContentMD5属性。//blob文件测试CloudBlobClientblobClient=storageAccount.CreateCloudBlobClient();CloudBlobContainercontainer=blobClient......
  • 算法学习笔记(38): 2-SAT
    SAT问题,也就是可满足性问题BooleanSatisfiabilityProblem,是第一个被证明的NPC问题。但是特殊的2-SAT我们可以通过图论的知识在线性复杂度内求解,构造出一组解。基本的模型在P4782【模板】2-SAT中有体现。经典的标志是:AB至少选一个,AB要么都选,要么都不选。简单的我......
  • 【celery详解】celery学习md笔记 第(2)期:Celery任务调度详解
    Celery是一个功能完备即插即用的任务队列。它使得我们不需要考虑复杂的问题,使用非常简单。celery看起来似乎很庞大,本文我们先对其进行简单的了解,然后再去学习其他一些高级特性。全套笔记直接地址:请移步这里共4章,12子模块介绍一下如何调用任务,队列路由.1.signature我......
  • 算法学习笔记(37): 矩阵
    一切线性操作都可以归为矩阵乘法--bySmallBasic本文是拿来玩耍,而不是学习的!目录线性递推超级矩阵快速幂!矩阵与邻接矩阵矩阵与线段树矩阵与FFT矩阵与期望不知道还能扯啥了矩阵的加法,要求两个矩阵大小相等,于是可以对位单点相加。\[C_{i,j}=A_{i,j}+B_{i,j}\]关于矩......
  • NS-3源码学习(一)
    NS-3源码学习(一)NS-3项目的源码包装的非常严密,对于仿真来说仅需要使用helper函数即可完成环境的配置。但是这种封装简直是解析ns-3数据传输的过程的一座大山。想要用传统的单步调试的方案去观察数据的流向更是寄,各种回调函数满天飞。没办法,只能从源码入手,一点点褪下这层helper函数......