.NET最佳实践?

4

我知道这是一个广泛的话题,但我对任何.NET的所谓最佳实践都很感兴趣,尽管我正在寻找不太明显的实践,而不是像“使用as而不是强制转换”这样的实践。
让我们看看我可以从Stack Overflow用户那里学到什么有趣的东西。

11个回答

19

首先,请查看模式和实践 - “使用微软已证明的软件工程实践。”。

接下来,请查看IDesign: .NET设计和流程解决方案。

在您浏览这些内容获取一些想法后,确保在您的代码库上启用代码分析/FxCop。开始彻底地检查每个警告。

最后,请去查看JetBrains的软件,并获取ReSharper。 如果您希望100%高效并确保以最小的困扰编写高标准的代码,则必须拥有 ReSharper(或类似工具,可在市面上获得)! :)

这将让您的标准和最佳实践覆盖99%。


我其实会用CodeRush,但是每个人有自己的喜好,对吧! :) - Stephanvs
所有的建议都很中肯,Adron。我还要补充一点,就是StyleCop(http://code.msdn.microsoft.com/sourceanalysis)和StyleCop for Resharper(http://www.codeplex.com/StyleCopForReSharper)。此外,还有一些不错的ReSharper插件,比如Agent Smith(http://www.jetbrains.com/resharper/plugins/#Agent_Smith_11.8)。 - Joseph Ferris

5
这并不是 .NET 特定的,但我认为最重要的是 SOLID 原则。Robert Martin(又名 UncleBob)有一个很好的参考文献,在这里(链接)。我将引用最重要的部分:
  1. SRP 单一职责原则:一个类应该只有一个变化的原因。
  2. OCP 开放封闭原则:您应该能够扩展类的行为,而无需修改它。
  3. LSP 里氏替换原则:派生类必须能够替换其基类。
  4. DIP 依赖反转原则:依赖于抽象,而不是具体实现。
  5. ISP 接口隔离原则:制定面向客户端的细粒度接口。
Steven Bohlen 在 dimecasts.net 上为它们制作了一系列简短的网络广播。

4

学习如何使用Reflector。它会教你比你想象的更多。


它将教什么?你会多频繁地使用它? - Johnno Nolan
1
例如,我查看了Professional Ajax.NET程序集并尝试学习Michael的编写方式。在查看该程序集之前,我不知道资源嵌入。每当我看到一个新组件时,我都会使用它。 - Canavar
1
请注意,在方法内部,代码可能会被优化混淆。 - Dykam

3

一个有趣的练习是将您的代码通过静态分析工具(如FxCop)运行。

它会提供数十个提示。其中一些可能适用于您的应用程序,而一些则不适用。例如国际化。


你也可以编写自己的规则! - WACM161

2
我觉得这个技巧非常有用:在web.config文件的system.web标签中设置deployment retail="true"会强制将调试标志设置为“false”。它还会强制用户使用自定义错误消息页面并禁用页面输出跟踪。当应用程序要部署到生产环境时,这非常有用。 Test Driven .Net是一个在Visual Studio中运行NUnit测试的优秀工具。

1

你可能会发现这两本书很有用:

  1. Effective C#
  2. More effective C#

它们是针对C#的,但你肯定会学到许多适用于任何.NET语言的好主意。


同意;Wagner有很多好的技巧! - TrueWill

1

但这些都是我在主题中提到的显而易见的,不是吗? - agnieszka
我不了解你的背景或经验。对于某些人来说,这显然并不明显。此外,“最佳实践”中最好的是简单的方法。 - Johnno Nolan

1

1

这些并不是特定于.NET的,而是更一般的设计:

我立刻想到的一个例子(因为我今天看到了这个问题并且一直在抱怨,以及之前也看到过太多次)是用条件检查包装代码来检查破碎的不变量,以避免异常。

所以,你最终得到的是一个系统,其中某些功能无法正常工作,而你不知道原因,并且对原始原因一无所知。

本周我看到的一个很好的例子是我们的一位工程师在成员变量周围添加了空引用检查,而这些成员变量是UI框架(WPF)负责分配的。然后这些检查避免了执行会导致空引用异常的操作。因此,在发生这种(灾难性的错误)时,我们有残缺的功能、困惑的用户和愤怒的支持团队。

所以,要快速失败,如果可能的话,明显地失败,并记录尽可能多的信息。

我最喜欢的指导原则之一是尽量减少可变性。在可能的情况下,我更喜欢设计不可变类。由于多核问题和并发设计的需要,不可变性现在变得越来越流行。我很久以前就开始使用它了,因为我需要简化一个具有复杂共享状态图的系统。我将该系统建模为类似于.NET的String和StringBuilder的思想(如果对象相当复杂,拥有一个构建器类来构建不可变对象有时非常方便)。

事实上,这是我对这个特定组件的第二个版本。我发现,设计以最小化可变性,并实现不可变类极大地简化了代码库。

我发现,即使在设计并发系统时,很少有工程师考虑到这个因素,他们经常陷入大量极其复杂脆弱的代码中。我通常对他们能够让它正常工作感到印象深刻!但是,对我来说,真正优秀的代码应该看起来简单。

祝好, Phil


0

框架设计准则:Cwalina和Abrams的可重用.NET库的约定、习惯用法和模式(第二版)解释了FxCop规则背后的原理,以及更多内容。这些并不都适用于您的项目,但通过阅读本书,您将学习到许多最佳实践。我经常参考它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接