我知道这是一个广泛的话题,但我对任何.NET的所谓最佳实践都很感兴趣,尽管我正在寻找不太明显的实践,而不是像“使用as而不是强制转换”这样的实践。
让我们看看我可以从Stack Overflow用户那里学到什么有趣的东西。
我知道这是一个广泛的话题,但我对任何.NET的所谓最佳实践都很感兴趣,尽管我正在寻找不太明显的实践,而不是像“使用as而不是强制转换”这样的实践。
让我们看看我可以从Stack Overflow用户那里学到什么有趣的东西。
学习如何使用Reflector。它会教你比你想象的更多。
一个有趣的练习是将您的代码通过静态分析工具(如FxCop)运行。
它会提供数十个提示。其中一些可能适用于您的应用程序,而一些则不适用。例如国际化。
这些并不是特定于.NET的,而是更一般的设计:
我立刻想到的一个例子(因为我今天看到了这个问题并且一直在抱怨,以及之前也看到过太多次)是用条件检查包装代码来检查破碎的不变量,以避免异常。
所以,你最终得到的是一个系统,其中某些功能无法正常工作,而你不知道原因,并且对原始原因一无所知。
本周我看到的一个很好的例子是我们的一位工程师在成员变量周围添加了空引用检查,而这些成员变量是UI框架(WPF)负责分配的。然后这些检查避免了执行会导致空引用异常的操作。因此,在发生这种(灾难性的错误)时,我们有残缺的功能、困惑的用户和愤怒的支持团队。
所以,要快速失败,如果可能的话,明显地失败,并记录尽可能多的信息。
我最喜欢的指导原则之一是尽量减少可变性。在可能的情况下,我更喜欢设计不可变类。由于多核问题和并发设计的需要,不可变性现在变得越来越流行。我很久以前就开始使用它了,因为我需要简化一个具有复杂共享状态图的系统。我将该系统建模为类似于.NET的String和StringBuilder的思想(如果对象相当复杂,拥有一个构建器类来构建不可变对象有时非常方便)。
事实上,这是我对这个特定组件的第二个版本。我发现,设计以最小化可变性,并实现不可变类极大地简化了代码库。
我发现,即使在设计并发系统时,很少有工程师考虑到这个因素,他们经常陷入大量极其复杂脆弱的代码中。我通常对他们能够让它正常工作感到印象深刻!但是,对我来说,真正优秀的代码应该看起来简单。
祝好, Phil
框架设计准则:Cwalina和Abrams的可重用.NET库的约定、习惯用法和模式(第二版)解释了FxCop规则背后的原理,以及更多内容。这些并不都适用于您的项目,但通过阅读本书,您将学习到许多最佳实践。我经常参考它。