学习.NET/OOP最佳实践的最佳方法是什么?

17

我对.NET编程(以及OOP)相对较新,我想确保我在设计应用程序时没有养成不良的初学者习惯。

如果您要雇用一位新的.NET开发人员,并且需要尽快让他适应工作,同时也希望确保他采用最佳实践(例如单一职责原则,单元测试,关注点分离),你会推荐什么样的学习路径?

我最近在听Polymorphic Podcast,虽然听到有关最佳实践的讨论很有用,但我发现缺乏旨在介绍这些最佳实践的屏幕录像和代码示例。

8个回答

16

16

有两个独立但相关的目标:

  • 成为优秀的面向对象(OO)开发人员

  • 成为优秀的.NET开发人员

要做到后者的卓越表现,至少需要做好前者,但两者都需要努力工作。不要被锁定在微软的思维方式中,甚至是.NET的思维方式中-您需要在广泛领域内建立熟悉感。

如果您有灵活性,可以找一份有经验的人愿意担任导师的工作或加入一个团队。

接下来,认识到您需要大量阅读,包括在线和离线阅读。如果您的阅读速度平均或较低(约为每分钟250个单词或更少),则应考虑参加阅读技巧培训课程。我曾参加过Write Group(新西兰)的培训课程,将我的阅读速度提高了三倍。

在书籍方面,从Microsoft Press出版的《Object Thinking》是一个不错的起点;其次我会阅读《Programming .NET Components》(Juval Lowy)和《Smalltalk Best Practice patterns》(Kent Beck),然后是《The Pragmatic Programmer》(Hunt和Thomas)。

之后,在StackOverflow或其他地方搜索推荐书籍和博客列表。继续阅读-尝试至少每两个月阅读一本新主题的新书,如果可以每月阅读一本。


4
如果你喜欢观看屏幕录像,请看一下Autumn of Agile。目前还没有很多集,但我相信他将涵盖一些最重要的最佳实践。
集数计划大致如下:
- 敏捷价值和实践概述 - 基本面向对象设计原则 - 实战设计模式 - 单元测试基础知识 - 模拟对象 - 测试驱动开发 - 项目文件/文件夹组织 - 源代码控制基础知识 - 持续集成/构建自动化 - 敏捷项目规划原则 - 领域驱动设计核心概念概述
该系列的作者还制作了备受欢迎的Summer of NHibernate系列。
此外,在dnr-tv上,Jean Paul Boodhoo制作了五集关于设计模式和两集关于测试驱动开发的视频,我建议也去看看。

2

我看到这里有很多优秀的资源,但大多数都集中在阅读和学习材料上。尽管这些显然是必不可少的,但我发现只有在实际使用模式、启发式或概念等一次或多次之后,它们才真正发挥作用。

基于此,我建议大家阅读相关内容,但当你开始编码时,务必要使用NUnit并练习TDD(或BDD等)。这将有助于你做两件事情:

  1. 它会迫使你解耦类。测试具有许多依赖关系的代码非常困难。如果你想真正深入地编写测试,你需要解耦。这是应用所有推荐阅读的好起点。 :)

  2. TDD将帮助你在编写代码之前思考如何与其交互。我发现从抽象的设计思考到从外部编写接口的实际编码是不同的,而后者更有利于拼合组件。


1
PluralSight的模式库面向对象设计原则非常优秀。小额的月度订阅费用绝对物有所值。通过在线详细解释的教程学习比阅读书籍更容易上手。

1

我认为你需要先了解成为一个“好”的程序员,理解面向对象编程和最佳实践需要时间和经验。没有魔法的书籍、博客或培训可以代替实践中的时间。

基于我的经验,我的建议是不要太担心你没有遵循最佳实践,只需多写代码即可。如果你是面向对象编程或.NET的新手,你会犯一些傻事。你会做相反于“最佳实践”的事情,直到你犯够了错误才能从中学习。

特定性训练理论表明,你应该专门做你想变得更好的事情。这意味着要编写大量代码以提高编码能力。

现在,一旦你无畏地编写了大量代码,你将需要补充外部知识。按重要程度排序:

  1. 直接与比你更有经验的人合作。这是最快的提升速度的方法。

  2. 阅读其他面向对象的.NET代码。开源很适合这个!研究它,扩展它,即使你从未提交过也可以为一个OSS项目添加功能。

  3. 阅读书籍。我特别指的是书籍...而不是博客。书籍有更多的空间来扩展一个主题,对于那些真正从零开始学习某个主题的人来说是最好的选择。我推荐《代码大全》作为第一本好书。

  4. 阅读网络资源。这包括博客、stackoverflow等。

祝你好运!


0

巧合的是,我正在阅读一本VB.net书籍(由Apress出版),这本书非常好。

虽然网络上有大量优秀的教程,但我强烈建议购买一本书,它们通常在方法上更加专业。

而且,尽管听起来很疯狂,但我发现在学习编程时最好不要坐在电脑前!我总是先读一两章,然后去电脑上实际操作。


0

我正在帮助一个朋友,他正处于你提到的情况中。他是一位硬件工程师,过去曾经使用C语言工作。

我认为最好的方法是指导和编码。我向他解释了一些概念,然后让他编写一些代码。我们只是在多个平台上构建了一个简单的计算器(WCF、Silverlight、XNA等),并使用了一些众所周知的模式(状态、MVP等)。

我强制他使用良好的编程实践,并通过要求他基于自己的错误添加新功能来重构代码。例如,如果他将视图和控制器这样的组件耦合在一起,我会要求他添加一个新视图...这显然会让他重新编写大量的代码,并意识到有更好的方法...

通过这种方式,他是自然地想出了解耦的方法,更重要的是“为什么是好的”。到目前为止,我对结果非常满意;他非常喜欢单元测试以及它如何使他轻松地改变代码。

在我看来,关注点分离和单元测试最好通过编码并实现新功能来解释和理解;特别是对于新程序员。一旦他接受了这个概念,我建议他阅读GOF的“设计模式”或其简化版本之类的书籍。


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