探索 .NET团队对API的设计流程

原文作者:steve gordon 原文链接: https://www.stevejgordon.co.uk/how-are-dotnet-apis-designed

在这篇文章中,我想介绍一些我觉得非常有趣的东西,.NET 团队是如何设计API的?我们先来看下.NET团队面临的有哪些挑战,您正在设计一套API库,每天有数百万的开发人员在使用这些库,它们在世界各地运行在重要的应用程序上面,您要对其进行改进并添加新功能或增强功能,而且不能破坏数百万个现有应用程序,这确实让人头大。

我喜欢编写C#代码,自己也写过很多API库,其中很多都是内部使用的库,而使用这个库的不到30人,即使这样,我仍然写了bug,那我得修啊,但我没有意识到所有的环境下这个库都是否可以使用, 以过去我的经验,我觉得设计公共API很困难。

在本文的其余部分中,我将按照我的理解来解释.NET API设计过程,这些是我根据对这一过程进行了几年的观察而得出的自己的解释,团队所做的大部分工作都是公开发布的,因此可以从他们如何组织.NET Core(和.NET 5)的API设计中学到很多东西。

为了使解释更具体,我将遵循最近的新库的设计,该库将作为.NET 5的.NET BCL(基类库)的一部分包括在内,比如,System.Net.Http.Json 这个库优化了 HttpClient 处理Json,我今天不讲这个库如何使用,我们将专注于它是如何产生的。

1.设计阶段 - Design

最开始,Immo Landwerth 发现在HttpClient中处理Json很麻烦,于是他在github提了一个json扩展的建议,里面包含了遇到了哪些问题,然后如何改进。

用简单明了的术语,描述了这个设计如何变得更好,以及用户(开发人员)对该功能的使用体验,包括示例代码,表达了开发人员会在什么情况下使用这个API。

在明确方案的情况下,接着继续介绍新的API的要求,它必须实现什么目标,在什么时间范围内?然后是设计本身,该设计包括建议的公共API,但是没有任何实现细节, 这包括设计引入的所有公共方法和类型。

2.NET设计审查阶段 - Review

.NET流程的下一个阶段是进行API设计审查, 这在Github上面进行,团队创建了一个 Issue,https://github.com/dotnet/runtime/issues/32937, 大家都有权限看到,这是公开的,因此社区可以征询反馈和建议,我真的很喜欢这些.NET开放的氛围!

API开始审查,在此会议上,.NET团队的核心专家汇聚一堂,评估方案并确保公共API适合目标框架,这是至关重要的一步,为了兼容性,设计中的错误或疏忽可能会持续很长时间,这意味着API决策需要彻底,团队也希望该API易于使用。

在API审核期间,会有人代表提案,并说明拟议设计的目标和原因,然后,团队将对其进行讨论,并确定提案是否需要进一步的工作,然后再批准,在被认为可以接受之前,可以在多次设计评审中提出一个API。

我真正欣赏团队的一点是,他们在YouTube上现场直播了这次会议,任何人都可以观看,尽管有时在会议期间聊天中留下的评论和反馈可能被认为是讨论的一部分,但这主要是一种仅查看的方法,在YouTube上,.NET Foundation 频道下的所有播放记录都可以去浏览。

您可以在YouTube上查看HttpClient JSON扩展方法的设计的讨论,https://www.youtube.com/watch?v=_AHbjIS8_0I

当我感兴趣的API有讨论的时候,我就会经常上去看这些,我发现听到讨论并观看.NET团队对设计框架的想法非常有趣,在此过程中必须考虑许多细微的差异,这里面包含了大量的.NET 方面的知识,通常会提出一些细微的实现细节行为,例如现有API的历史方面及其行为,可能观看这样一次会议,要花一两个小时, 但我还是建议您有空可以参加其中的一些会议,来真正欣赏.NET框架的设计。

在审查期间,通常会使用GitHub Issue的标准做法, .NET的程序经理 Immo Landwerth 通常主持会议并在讨论过程中做笔记, 任何关注,反馈和更改都将记录为设计审查的输出。

3. 提交阶段 - PR

一旦获得批准,开发人员开始写写写,来实现这个API,就像这个示例一样,可能某些工作已经试验完成,然后还将需要把一些更改的内容,记录到设计评审的反馈中。

该功能的大部分工作由David Cantu完成,可以在GitHub上的拉取请求(PR)这里看到,https://github.com/dotnet/runtime/pull/33459 , 同样的它在Github,公开透明,任何人都可以订阅通知,甚至发表评论。

我建议开发人员应该很熟悉这个阶段,开发人员在git分支上完成了一些工作,一旦该工作完成并准备好考虑合并,就可以创建一个PR,一般可以直接合并到项目,但是出于质量考虑,其他开发人员通常会进行一个或多个代码审查,在Microsoft .NET世界中,这必须要考虑全面,因为不一致和性能问题可能是以后要解决的问题。

在这个例子中(Json扩展库),我们可以看到很多评论,包扩多个有经验的专家,您将看到有关代码复杂性的详细反馈,这是我从提出和讨论的小项目中学到很多东西的地方,随着时间的推移,您可以观看PR,甚至可以查看较新的提交,这些提交可以解决反馈并解决任何问题。

4.合并发布 - Release

一旦所有的审阅者批准了这个PR,然后这些代码被合并到master分支中,因为.NET 运行时是一个非常复杂的库,里面有高级的构建过程,来处理这些新合并的代码。

最终,新代码将出现在相关库的夜间版本中(nightly),也可能被推送到MyGet或NuGet feed中以供预览使用和测试,对于本篇的示例,生成了一个新程序包,并在NuGet上作为预发布预览发布了该程序包

总结

这个过程非常有趣,我们了解到了.NET 团队,最初由一个想法,再经过设计,审查,讨论,最终上线,这些都在Github进行,都是公开的,在这个过程中,我们可以学习非常全面的.NET的知识,因为微软的专家处理这些事情,考虑的非常全面和细致。

最后

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

静态页面的值传递

1两窗口之间存在着关系.父窗口parent.htm打开子窗口son.htm子窗口可以通过window.opener指向父窗口.这样可以访问父窗口的对象. 优点:取值方便.只要window.opener指向父窗口,就可以访问所有对象. 不仅可以访问值,还可以访问父窗口的方法.值长度无限制.缺点:两窗口要存在着…

java类同步_Java中方法,对象,类的同步

关于在多线程环境中使用同步,我需要一些澄清.我在下面有一个小例子类.但我实际上发现很难做出以下内容如何工作的测试用例;我想要测试用例的原因是要了解同步如何处理这些不同的场景>如果一个线程调用SharedResource.staticMethod,它将获取该类的锁.它是否意味着一个SharedR…

ocelot 中间件的变化

ocelot 中间件的变化Intro之前我们使用 ocelot 的时候自定义了一些中间件来实现我们定制化的一些需求,最近博客园上有小伙伴问我怎么使用,他用的版本是 16.0 版本,16.0 和 17.0 版本的差异不是特别大,就以 17.0 版本为例看一下 oc…

mybatis mysql usegeneratedkeys_mybatis中useGeneratedKeys用法--插入数据库后获取主键值

前言:今天无意在mapper文件中看到useGeneratedKeys这个词,好奇就查了下,发现能解决我之前插入有外键表数据时,这个外键获取繁琐的问题,于是学习敲DEMO记录在项目中经常需要获取到插入数据的主键来保障后续操作&#xf…

Istio 知多少 | 下一代微服务的守护者

1. 引言在写完eShopOnContainers 知多少[12]:Envoy gateways后,就一直想进一步探索Service Mesh,最近刚在极客时间上学完《Service Mesh入门》,又大致浏览了一遍官方文档,对Istio也算有了基本的认识。下面就根据自己的…

微软家也会出错

下图是2006年2月8日微软WebCast首页的截图转载于:https://www.cnblogs.com/mssite/archive/2006/02/08/327130.html

mysql 基础视图_MySQL基础(4) | 视图

MySQL基础(4) | 视图基本语法1.创建CREATE VIEW AS 语法说明如下。:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。对于创建视图中的 SELEC…

C# 中的 null 包容运算符 “!” —— 概念、由来、用法和注意事项

在 2020 年的最后一天,博客园发起了一个开源项目:基于 .NET 的博客引擎 fluss,我抽空把源码下载下来看了下,发现在属性的定义中,有很多地方都用到了 null!,如下图所示:这是什么用法呢&#xff1…

[转]不找情人的七种理由(献给已婚的男人)

献给已婚的男人不找情人的七种理由   好像有个曾一度风靡的短信,“结婚是错误,离婚是觉悟,婚外恋是醒悟,再婚是执迷不悟,没有情人是废物,情人太多是动物。”咱不怕犯错误,可没办法不当废物,三十好几还没混上个情人,想起来就惭…

无法初始化java类_myeclip运行java程序不能初始化类 NoClassDefFoundError

引用 3 楼 Menglinyang 的回复:是就这个项目有问题还是所有的都是这样?package cn.itcast.utils;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.…

C#学习笔记(十四):StatusBar控件

状态栏控件StatusBar<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />StatusBar的一些常用属性&#xff1a;名称可用性描述BackgroundImage读写可以给状态栏赋予一个图像&#xff0c;显示在背景上。Panels只读这是状态栏上的面板…

微前端架构在容器平台的应用

源宝导读&#xff1a;随着业务的发展&#xff0c;天际-星舟平台未来需要解决与其他云共创共建&#xff0c;跨团队高效协作等诸多问题&#xff0c;而星舟现有的技术架构将难以支撑。本文将介绍星舟平台如何通过向更先进的“微前端”架构演进落地&#xff0c;以应对将来快速增长的…

java八皇后问题穷举算法_穷举法和回溯法解n皇后问题

八皇后问题是一个以国际象棋为背景的问题&#xff1a;如何能够在88的国际象棋棋盘上放置八个皇后&#xff0c;使得任何一个皇后都无法直接吃掉其他的皇后&#xff1f;为了达到此目的&#xff0c;任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇…

Microsoft PHP.Net ?

居然发现老外有个项目在把PHP搞成象。NET那样咯&#xff0c;核心是Framework 上把 PHP 编译为MSIL。居然见http://www.php-compiler.net/&#xff0c;而且今年居然还FINAL 1.0出来了&#xff0c;这对象把PHP放到.NET平台上来的人说是好消息。20 February 2006: Phalanger versi…

巧用 Lazy 解决.NET Core中的循环依赖关系

原文作者: Thomas Levesque 原文链接&#xff1a;https://thomaslevesque.com/2020/03/18/lazily-resolving-services-to-fix-circular-dependencies-in-net-core/循环依赖的问题在构建应用程序时&#xff0c;良好的设计应该应避免服务之间的循环依赖, 循环依赖是指某些组件直接…

绝句

新世纪“绝”句上联:男生&#xff0c;女生&#xff0c;穷书生&#xff0c;生生不息&#xff01; 下联:初恋&#xff0c;热恋&#xff0c;婚外恋&#xff0c;恋恋不舍!横批&#xff1a;生无可恋 上联:博士生&#xff0c;研究生&#xff0c;本科生&#xff0c;生生不息&#xff…

java的编译器怎么出来_怎样掌握ava编译器的使用,教程在这里,如何进行Java初级学习...

原标题&#xff1a;怎样掌握ava编译器的使用&#xff0c;教程在这里&#xff0c;如何进行Java初级学习Java的学习中&#xff0c;并没有那么的繁琐&#xff0c;只需要我们逐步掌握&#xff0c;就能够发觉java是全世界最好的编程语言之一。那么今天就带领大家进行简单的JAVA初级学…

小试elsa

最近工作需要&#xff0c;在调研BMP产品&#xff08;开源和商用&#xff09;&#xff0c;重点了解了activiti和它的商业产品Alfresco Process Services&#xff0c;这是java的体系&#xff0c;成熟&#xff0c;完善(三方开源库是java多年开源积累下的最宝贵的财富)&#xff0c;…

如何判断当面的网页加载完成?

if(document.readyStatecomplete){ window.alert(加载完成&#xff01;); } 转载于:https://www.cnblogs.com/MaxIE/archive/2006/03/24/357504.html

java抠图人物背景图片_如何进行人物抠图?让你快速完成复杂背景人像的在线抠图...

大多数男生心目中都有一个女神&#xff0c;虽然在其他人眼中不过是普通人&#xff0c;但是在自己眼中她怎么看怎么有魅力。当然对于女神提出的各种各样的“要求”或是请求&#xff0c;你们定然是不会轻易拒绝的。但若是女神需要你帮忙抠图&#xff0c;你知道如何进行人物抠图吗…