.NET最佳实践?

时间:2009-02-09 15:02:48

标签: .net

我知道这是一个广泛的话题,但我对.NET的所谓最佳实践感兴趣,尽管我正在寻找不那么明显的主题,不像“用作代替投射”。 让我们看看我可以从Stack Overflow用户那里学到什么有趣的东西。

11 个答案:

答案 0 :(得分:19)

首先,查看patterns & practices - “使用Microsoft经过验证的软件工程实践。”。

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

在深入了解这些内容后,请务必在代码库中启用代码分析/ FxCop。彻底开始每个警告。

最后但并非最不重要的是,请查看JetBrains'软件并获取ReSharper。 ReSharper(或类似工具,有些可在那里使用)是必须拥有的,如果你想要100%有效并确保你的代码达到高标准,只需要极少的头痛! :)

这将使您获得99%的标准和最佳实践。

答案 1 :(得分:5)

这不是特定于.NET的,但我认为最重要的是SOLID原则。 罗伯特马丁(又名UncleBob)有一个很好的参考here。 我将引用最重要的部分:

  1. SRP单一责任原则一个班级应该只有一个改变的理由。
  2. OCP开放封闭原则您应该能够扩展类行为, 没有修改它。
  3. LSP Liskov替换原则派生类必须可替代其基类。
  4. DIP依赖性倒置原则取决于抽象,而不是结核。
  5. ISP接口隔离原则制作客户特定的细粒度接口。
  6. Steven Bohlen在dimecasts.net制作了一系列有关他们的网络演员。

答案 2 :(得分:4)

了解如何使用Reflector。它会教你更多的想法。

答案 3 :(得分:3)

一个有趣的练习是通过静态分析工具(如FxCop)运行代码。 它会带来几十个提示。有些可能适合您的应用,有些则不适用。例如。国际化。

答案 4 :(得分:2)

  • 我发现这个技巧非常有用:在web.config中的system.web标记中设置deployment retail =“true”将强制调试标志为“false”。它还将强制用户的自定义错误消息页面并禁用页面输出跟踪。当应用程序进入生产环境时,这很有用。

  • Test Driven .Net是在Visual Studio中运行NUnit测试的绝佳工具。

答案 5 :(得分:1)

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

  1. Effective C#
  2. More effective C#
  3. 它们特定于C#,但您肯定会学到许多适用于任何.NET语言的好主意。

答案 6 :(得分:1)

对于OO代码,您可能需要查看SOLID principles。然而some argue他们妨碍了成品。

答案 7 :(得分:1)

  

让我们看看我有趣的事情   可以向Stack Overflow用户学习。

这可能不是“最佳实践”的目标,但对您来说当然可能很有趣。看起来Stack Overflow已经记录了它的实践,技巧和窍门。

对于.NET:

对于C#:

答案 8 :(得分:1)

这些不是特定于.NET的,而是更通用的设计:

一个立即浮现在脑海中的人(因为我今天已经看过这个并且一直在咆哮,并且之前看过很多次)是用破坏不变量的条件检查包装代码,以避免异常。

所以,你最终会得到一个系统,其中某些功能不起作用,你不知道为什么会这样,并且没有关于原始原因的零信息。

本周我看到的一个很好的例子是我们的工程师之一对UI框架(WPF)负责分配的成员变量进行了空参考检查。然后,这些检查避免执行将导致空引用异常的操作。因此,如果出现这种情况(灾难性错误),我们会禁用功能,混淆用户并且支持团队生气。

因此,快速失败,明显失败(如果可能)并尽可能多地记录信息。

我最喜欢的另一个指导原则是尽量减少可变性。在可能的情况下,我更喜欢设计不可变类。由于多核问题和设计并发性的需要,不变性现在变得越来越时尚。我开始使用它虽然很长一段时间后需要简化具有共享状态的复杂图形的系统。我使用与.NET的String和StringBuilder类似的想法对系统进行建模(有时候有一个构建器类可以构建一个不可变对象,特别是如果它相当复杂的话)。

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

我发现,即使在设计并发系统时,也很少有工程师考虑这个因素,并且往往最终会产生大量极其复杂的脆弱代码。我通常会以一种能让它发挥作用的方式给我留下深刻的印象!但是,对我来说,真正好的代码应该看起来很简单。

此致 菲尔

答案 9 :(得分:0)

Framework Design Guidelines:Cwalina和Abrams的可重用.NET库的约定,成语和模式(第2版)解释了FxCop规则背后的原因,以及更多内容。并非所有这些都适用于您的项目,但通过阅读本书,您将学到许多最佳实践。我经常提到它。

答案 10 :(得分:0)

我发现那些询问X最佳做法的人,往往需要停下来学习思考,而不仅仅是从某人那里得到一份神奇的名单。没有5或6个项目的神奇列表,但很多次是常识。考虑一下您试图实现的目标以及如何在您的环境中执行此代码。

亲自问这种Q对我来说是一个即时停止的标志,因为它表明这个人没有试图为自己思考而且很可能永远不会。开发工作中最重要的属性是解决问题和逻辑思考任务的能力。学习语法,库只是一个练习,而不是全部,最终都是。任何开发人员都可以查看一个新的API,并通过一些试验和错误提供它不是完全垃圾的理解。

开发不是机器人任务,只是在列表之后,每个类/组件/插入构建块在这里是不同的,需要思想和理智。