草庐IT

C# 世界的《Effective C++》,来自.Net之父的核心揭秘

博文视点 2023-04-21 原文

作为.NET程序员,如果只读三本书,那么《框架设计指南:构建可复用.NET库的约定、惯例与模式(第3版)》这本书一定不容错过!

这本书被誉为C# 世界的《Effective C++》!

它可以帮助你从设计者的角度去观察如何更好地设计和使用框架来进行日常的开发活动。

有人说:读这本书的感觉就像是去微软总部出了一次差,然后CLR的设计者大牛们每天跟你开会聊天,讲讲他们在设计Framework时的得失,有哪些有趣的或者遗憾的故事。

本书第2版原著豆瓣评分9.1,被网友称书中“都是一针见血的见解”!

如今,这本畅销经典迎来“史诗级”更新!

与第2版发布时的2008年相比,今天的软件开发范式用翻天覆地来形容也不为过,容器化、云服务、跨平台、DevOps等,都对今天的软件开发者和框架设计者提出了更高的要求。

本书对第2版的内容进行了全面的更新,以适应当下发展的潮流。

《框架设计指南》第3版新增了许多设计准则,这些准则与 .NET 团队在从“客服端-服务端”应用到云应用这一转变过程中所采取的一系列变更息息相关。

为什么学习框架设计

像 Spring Framework、ASP.NET 这样优秀的后端框架为我们提供了极大的便利,可以让我们可以高效且可靠的创建复杂的网络服务。

在前端领域,也有 React、Angular、Vue 这样的框架,它们的出现彻底改变了前端业务的开发方式。

通过使用框架和可复用代码库,可以显著减少开发者的重复劳动,因为它们可以在不同的应用程序之间共享和重用代码逻辑。这使得开发者可以更快速地构建软件应用程序,从而提高生产力和效率。

同时,框架和可复用代码库可以使我们的应用程序更易于维护,因为它们提供了一种标准的方法来组织和管理代码。此外,这些库已经被大量地测试和优化,被广泛应用,因此可以提高应用程序的代码质量,减少常见的编程错误,例如内存泄漏、代码重复等问题。

然而设计高效的框架或者可复用代码库并非易事,需要我们在简单性、可用性和生产力之间反复取舍,最终才能够选择出最适合的解决方案。

即使你不需要亲自去设计一个框架,了解框架设计的底层思想,也可以帮助你在日常的开发活动中更好地使用框架!

来自.Net之父们的核心揭秘

本书从最基本的设计原则和准则出发,全方位介绍了设计框架的很好实践,是微软工程师从.NET Framework开发伊始到现如今的.NET这二十来年间宝贵经验的总结。

作者以一致性和易用性为骨,内中的一条条准则为脉络,再用丰富的用例和注解为血肉,将书中内容全方位呈现在我们面前。

它让我们了解到,针对不同的 .NET API,它为什么要这么去实现以及它又是如何被实现的,既加深了我们对现有 .NET API 的理解,也为我们指明了框架设计的正确道路。

(精彩的大师注解点评)

不限于.NET

需要特别说明的是,这本书不是一本教你如何编码的书,内容也不限于 .NET 平台。

虽然大多数示例是以 C# 呈现的,但是如果你不是 .NET 程序员,这也完全不会影响你的阅读。

如果你不是 .NET 程序员,那么你不需要严格遵循本书的准则,你大可以本书为蓝本,构建出属于你自己或团队的编码规范。

如果你碰巧是 .NET 程序员,那么如果你能够尽可能地遵循这些准则,坚持下来一定能有所回报。

希望本书能够帮助你成为一个更加杰出的程序员!

该书针对框架设计流程的每个步骤提供了详细指导,并为你提供实用的建议和技巧,帮助你更高效地设计软件框架和可复用代码库。

此外,该书还详细介绍了如何对设计出的框架进行评估和测试,以确保其符合设计要求,并能够在实际应用中稳定运行。

除此之外,该书还提供了丰富的案例和真实的生产经验,让您可以通过实际的示例和实践来深入了解软件框架的设计和开发。

通过阅读该书,您将能够掌握设计高质量软件框架所需的所有技能和知识,并在实际工作中取得更好的成果。



限时五折优惠,快快抢购吧!
每日抽奖
奖品《学习的学问》

有关C# 世界的《Effective C++》,来自.Net之父的核心揭秘的更多相关文章

  1. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  2. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  3. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  4. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  5. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

  6. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  7. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  8. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  9. .net - .NET 将如何影响 Python 和 Ruby 应用程序? - 2

    我很好奇.NET将如何影响Python和Ruby应用程序。用IronPython/IronRuby编写的应用程序是否会非常特定于.NET环境,以至于它们实际上将变得特定于平台?如果他们不使用任何.NET功能,那么IronPython/IronRuby相对于非.NET同类产品的优势是什么? 最佳答案 我不能说任何关于IronRuby的东西,但是大多数Python实现(如IronPython、Jython和PyPy)都试图尽可能忠实于CPython实现。不过,IronPython正在迅速成为这方面的佼佼者之一,并且在PlanetPyth

  10. ruby - 可以正常中断的来自 Rake 的长时间运行的 shell 命令? - 2

    在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa

随机推荐