关于如何进行OOP设计的建议

时间:2008-10-29 17:52:37

标签: oop architecture

我发现每当我开始用Java / C#编写应用程序时,事情就开始了,但随着时间的推移,随着应用程序变得越来越复杂,它变得越来越复杂。我已经意识到我不擅长设计和高级架构。我的所有课程都变得相当紧密,设计并不“优雅”。我在“低级”编程方面非常称职。也就是说,我可以在函数或类中完成任何事情,但我的高级设计很弱,我真的想改进它。有没有人指出技术,书籍等有助于我成为更好的软件工程师?

15 个答案:

答案 0 :(得分:3)

<强>书籍:

  • Code Complete,作者:Steve McConnel
  • 设计模式,由Gamma等人。人

答案 1 :(得分:3)

我不同意从一本关于设计模式或重构的书开始。

在我看来,对于坚实的OO设计,您首先应该熟悉主要的OO设计原则,然后了解如何在这些基本原则中表示您的问题。然后,您可以开始发现应用设计模式和重构技术的机会,以实现这些基本原则。

我会从这本书开始:

Robert C. Martin的

Agile Software Development, Principles, Patterns, and Practices

在本书中,罗伯特·马丁描述了fundamental principles做出良好的OO设计,所有这些都与封装,耦合和模块化有关:

  • 开放/封闭原则
  • Liskov Substitution
  • 依赖性倒置
  • 粒度
  • Common Closure
  • 重用
  • 无循环依赖
  • 依赖性的稳定性
  • 抽象和稳定性

毕竟,我在GoF和Fowler中记录的几乎所有设计模式和重构技术都旨在实现其中几个基本原则中的一个,具体取决于它们对给定场景的相对优先级。

答案 2 :(得分:2)

我首先要草绘我的设计。该草图可以是用于显示类之间关系的框和箭头图,也可以是UML(或者甚至是标准UML)的变体。但我发现草图可以帮助我看到设计是好/坏,甚至可能是如何解决它。

我还会看一本关于设计模式的书。

答案 3 :(得分:2)

你的问题的答案本身可以填写一本书,但我建议你看看设计模式。

关于这一主题的经典着作被称为“四人帮”一书:

Gang of Four Design Patterns Book

Martin Fowler在该领域也受到高度重视。

答案 4 :(得分:1)

写一个大型项目,让它尽可能大地传播。然后研究如何改进代码。

如果结构合理,也许单个大型例程也可以清晰易懂。

好的设计没有一个好的答案。这实际上是程序员可以学习的有价值的东西之一。

答案 5 :(得分:1)

您可以无情地重构以改进现有代码的设计。

主要思想是,在某些时候代码确实有意义,当新功能被带入代码时,可能一些功能或责任必须转移到另一个类,这很好。然后,您停止开发新功能并开始重新编码代码。

我建议你阅读:

Refactoring by Martin Fowler

答案 6 :(得分:1)

答案 7 :(得分:0)

在开始之前尝试制作程序大纲和图表,然后让其他人复习并批评它。然后随着程序的增长,不断更新轮廓和图表以包含新功能。由其他人审核和批评。最后,假设您正在从批评中学习,您将更好地设计程序。

书籍和教程只能让你到目前为止。虽然您确实需要学习可用的工具和方法,但知识本身对您没有帮助。练习是让你在设计上更好的原因,同时有一位导师教练你不时向你展示如何更好地运用你从书本中获得的一些知识。

答案 8 :(得分:0)

通过各种方式阅读书籍,但如果您编写的代码最终会产生愚蠢,请不要感到难过。每个人都这样。问题是,你能重构你需要解决的问题吗?为了能够有效地执行此操作,您需要使用TDD并编写大量单元测试。

答案 9 :(得分:0)

我强烈建议您尝试测试驱动开发(TDD)。您会发现,为了使您的代码可测试,而不需要经常执行测试的返工,您需要有一个可靠的设计。你会发现,当你添加\ change \ remove功能时,你的更好的设计需要对一组特定的测试进行一小组修改。糟糕的设计会消灭大量的测试 - 因为你有紧密耦合,负责多个问题的对象等等......

我发现TDD越好,我的架构越好,最终结果越好。

请注意,TDD需要真正的心理训练。您不应该期望您使用它1-2天并立即看到结果。你需要真正想要做到这一点,并且真正付出努力 - 否则你不会受益,而且可能最终会讨厌它。

HTH ......

答案 10 :(得分:0)

你可以做几件事

  1. 使用高级和高级工具 你之前的低级别设计 实际上开始编程。例如。 创建类UML图将会 帮助你的头脑想象 解决方案的图解形式 比代码表格。

  2. 熟悉Java 设计模式。例如。运用 继承多态地开始 将温暖你开始使用 标准的Java和J2EE设计 图案。

  3. 我在这里指出的主题有很多书籍和网站。

答案 11 :(得分:0)

浏览良好的API代码。例如Spring框架代码。 阅读一些好书,如设计模式(与此处提到的其他人一样)和其他一些关于良好实践的书籍。例如,Java,Head First Design,Effective Java series等。 C ++ - 有效的C ++系列

答案 12 :(得分:0)

显然,阅读一些推荐的书籍会有所帮助。我认为Head First Design Patterns绝对不如GoF书那么抽象。

我问的主要问题是“这段代码是非常具体的,可以重复使用吗?”如果是这样,请将其放入允许重复使用的程序集中。

如果你真的刚刚开始,那么我以前做的一件事就是将每个数据库表都视为“对象”。所以每个数据库表代表一个类。纯粹主义者会告诉你这是一场灾难,但我发现这是让自己开始用对象术语思考的好方法。

答案 13 :(得分:0)

答案 14 :(得分:0)