软件分析...从UML还是设计模式开始?

4

我是一名有2年经验的Java程序员,我非常喜欢编程,特别是面向对象编程。如果我有一个项目,我会直接开始编程,而不进行任何系统分析操作,因此我的代码没有按照应该排序的方式排列。我想学习如何编写和设计良好的代码,我应该开始学习UML还是可以直接通过设计模式?最好的学习UML和设计模式的书籍是什么?

非常感谢您的时间。


你谈论起学习UML好像是一项巨大的任务。其实,你真正需要了解的基础知识只需要几页纸就可以描述清楚。 - Raedwald
5个回答

2
从宏观上设计开始,确定解决方案的主要部分。您可以使用UML进行设计,但不是必需的。

然后,开始编写测试或可执行规范,并逐步改进代码以满足这些测试。将宏观设计作为指南,并参考测试。实践测试驱动开发。征求利益相关者的反馈。迭代。迭代。迭代。

(当然,这在很大程度上取决于您所做的应用程序类型,我假设是商业类的非安全关键软件)。

至于书籍,请查看“领域驱动设计”和“Growing Object Oriented Software, Guided by Tests”。

哦,永远不要从设计模式开始......


1
永远不要从设计模式开始。+1 - user949300
1
Eric Evans的《领域驱动设计:软件核心复杂性应对之道》值得一读,点赞! - Sergey Vyacheslavovich Brunov

1

UML只是达到目的的一种手段,而且不是唯一的手段。你可以尝试使用它,看看自己是否喜欢。个人而言,我并不太喜欢它。你需要自己发现如何思考和设计应用程序。个人而言,我喜欢在白板上画框。

设计模式可能很有用,但它们描述的是更具体问题的解决方案。一个陷阱是,那些从设计模式开始的人会试图将其应用于任何地方。他们试图将设计模式与问题匹配,但实际上应该反过来。UML和设计模式并不是互斥的,它们也不一定服务于相同的目的。

就设计模式而言,我发现Head First Design Patterns是一本不错且易于阅读的书籍,尽管这非常主观,因为我知道很多人真的讨厌Head First系列书籍的写作风格。


0

UML是表示模型的一种方式,而不是替代模型的方式。模型可以用UML来表达,但不仅限于UML。
设计模式有助于创建合适的模型并避免常见错误。就个人而言,我发现Martin Fowler和Eric Evans的书非常有用,但我相信还有很多其他优秀的作者。


0

学习如何设计代码没有固定的方法,它需要经验。

15年以上的汇编/基础/Pascal/Java/C/C++/C#和其他无数种语言后,有时我的代码并不像应该(或可以)那样整洁,但我获得了很好的薪酬,并被普遍认为是一名优秀的程序员。

这背后有太多原因,紧迫的发布日期、技术发展过快、愚蠢的客户需求、只考虑可扩展性而不关注可用性的庞大框架(这甚至是一个英文单词吗)。

当我开始一个新项目时,第一件事就是喝杯咖啡。

然后我联系客户(或将使用应用程序的人),试图了解他们真正需要什么。理解客户的需求是真正的目标(当然,在得到报酬之后^^)

在此之后,我拿起铅笔和纸,不按照任何标准进行绘制。盒子、圆圈、箭头,带有注释,一种艺术性的头脑风暴。

设计模式...最好的方法就是避免使用它们。很多时候它们并不适用于实际问题,但全世界的程序员都在滥用它们,是的,主流技术导致了这种情况。但如果你确实有绝对的理由使用它们,那就从GoF大作开始(《设计模式:可复用面向对象软件的基础》:Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides)。
两年只是很短的时间。设计出优秀的代码需要更多时间(当然,还要尝试不同的编程语言)。

4
积极避免设计模式似乎是一种不明智的做法,特别是考虑到它们在默认语言库中经常被使用。迭代器?观察者?模板?外观?装饰器?我认为在过去25年里,我从未参与过一个没有使用其中大多数或全部的项目。 - Dave Newton
1
避免使用设计模式只因为一些程序员滥用它们是一个非常糟糕的理由。许多常见问题已经得到解决。正如Dave Newton所说,许多框架中都有这些模式,你认为WPF中的Commands是从哪里来的呢? - diggingforfire
1
不要回避设计模式。确实阅读GoF的书籍是必要的。但是,仅仅拥有一个装满合适工具的工具箱并不能自动让你成为顶尖的木匠;同样地,了解所有设计模式也不能让你成为顶尖的设计师。偶尔会遇到一些不符合任何设计模式的问题。 - Dawood ibn Kareem
我很好奇为什么会有人点踩,不过,模式可能被滥用的观点是正确的。(我认为这些天它们被滥用的情况要少得多了,现在热潮已经消退了。) - Dave Newton
2
也许我应该说“避免滥用设计模式”。但是当我开始一个项目时,老实说,我并不关心设计模式,首要任务是理解需求,实现可以稍后再考虑。设计一个好的应用程序不是编写我们喜欢的代码或者遵循主流思想的问题,而是提供给客户一个功能齐全、易于使用和可维护的东西。仅仅为了实现“HelloWorld”,写一个类层次结构(或者诉诸于模式)只是一种天真的想法。 - BigMike
显示剩余2条评论

0

关于设计模式,最好的书籍是由四人组所著的《设计模式:可复用面向对象软件的基础》。该书的最新版本还包括了一本UML书籍。这两本书将是一个很好的开始。

然而,仅仅实现设计模式是错误的。当你想要学习编写和设计良好的代码时,理解何时使用模式(以及何时开发自己的模式!)是必须的。


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