我在使用.net技术的应用程序开发方面有近6年的经验.多年来我作为一个更好的OO程序员得到了改进,但是当我看到其他人编写的代码(尤其是Jeffrey Richter,Peter Golde,Ayende Rahien,Jeremy Miller等人)时,我觉得我和他们之间有代沟.设计.我通常在ReSharper等工具的帮助下动态设计我的类,用于重构和代码组织.
所以,我的问题是"成为更好的OO程序员需要什么".是吗
a)经验
b)书籍(请参考)
c)过程(tdd或uml)
d)模式
e)其他什么?
如何验证设计是否良好,易于理解和可维护.因为在行业中有如此多的流行语,如依赖注入,IoC,MVC,MVP等,应该更多地集中在设计中.我觉得抽象是关键.还有什么?
您可能会发现您欣赏的优雅OO设计不是第一次迭代,而是来自多次调整,重构和微调的结果
尝试确定为什么你认为他们的设计比你的设计"更好",并相应地进行调整
业余作家和专业作家之间的区别在于专业人士的重写 ; 编程也是如此
[幽默]
面向对象的技能可以从书本和其他资源中学习.但如果你幸运的话,你继承了父母的技能.大多数情况下,提供和使用正确的方法是一个问题.注意参数的数量.越少越好.
使用正确的名称.使用动词作为活动方法.将名词用于需要记住的任何事物.不要太有创意,尽可能简化您的解决方案,否则您的用户将成为混淆者.
封装令人讨厌的细节也很重要.并确保为公众隐藏您的私人成员,否则将发生意外行为.还要注意在适当的级别捕捉您的异常情况.
让我按下你总是测试你的单位,并使用正确的界面为快乐的用户提供足够的句柄.
[/幽默]
每样东西都来一点.至于任何语言(口头ou编程),你接触到的越多,你学到的就越多.
所以阅读书籍,阅读你的同事代码.至少同样重要的是,学习新的编程语言:它们将拓宽您的视野,让您对自己的代码更具批评性,并让您重新思考您的编程习惯.
关于设计模式,它们是解决常见语言常见问题的事实上的标准方法.您必须了解它们以避免重新发明轮子并更好地与同事沟通,但您也应该看到它们正在解决您正在使用的语言中缺少的功能.状态机模式仅存在于不将它们作为内置函数提供的语言中(不是我知道提供它们的语言,而是你得到的图片).
我还要补充一下:
如果需要和时间允许,总是重构(当然,因为你有单元测试以避免回归,所以无害).
学会何时避免继承(这比你想象的更频繁).
学习何时避免OO(当它没有添加任何值时).
不要将OO与封装混淆(这是OO的主要好处,但也由其他范例提供).
良好的OO设计:
它读起来像诗歌
不需要任何评论
相信你的对象(让控制去)
赞成作文而不是遗产