写出很棒的软件

时间:2010-05-08 12:35:15

标签: design-patterns oop

我目前正在阅读Head First的面向对象分析和设计。该书指出,要编写出色的软件(即精心设计,编码良好,易于维护,重用和扩展的软件),您需要做三件事:

  1. 首先,确保软件完成客户希望它做的所有事情
  2. 完成第1步后,应用面向对象的原则和技术,以消除任何可能已经滑入的重复代码
  3. 完成第1步和第2步后,应用设计模式以确保软件在未来几年内可维护和重复使用。
  4. 我的问题是,在开发出色的软件时,您是按照这些步骤进行的吗?如果没有,您通常会遵循哪些步骤以确保其设计良好,编码良好,易于维护,重复使用和扩展?

7 个答案:

答案 0 :(得分:9)

面向对象不是你事后想到的东西 - 你从OO分析和设计开始,然后进行OO实现。我怀疑你可能误读或误解了这本书。与设计模式类似 - 它们不是附加组件。

答案 1 :(得分:2)

我不同意#1,因为大多数优秀的软件都需要几次重大的迭代才能变得非常棒。实现#1(第一次尝试)的唯一其他方法是复制其他已经很棒的软件。但是想出一些新的和独特的东西(就像我在1991年用ClipMate做的那样),你会尽最大的努力,然后将它发布到世界各地,看看客户对此有什么看法。通过在客户输入和交互的同时重新评估产品的重复循环,您最终可以获得出色的软件。

答案 2 :(得分:1)

我通常从面向对象的设计开始。它必须是一个非常快速的脏/黑客,不需要#2和#3。麻烦的是,不要过量使用它们。

答案 3 :(得分:1)

如果我正确地解释它,听起来有些偏执。但也许意图是正确的 - 1)可以被解释为“保持专注”,特别是关注业务需求。这并不意味着忽略所有编码需求,而是取得平衡。有许多代码更改和重构无疑会提高代码的质量,但这些代码必须根据项目所花费的时间,风险和延迟进行加权。作为开发人员,将代码更改置于业务需求以上(过度)非常容易。

以后应用OO原则听起来不切实际 - 如果您没有使用OO原则,那么该软件如何首先完成客户想要构建的内容?也许它暗示着不断重构,KISS和减少前期设计,转而支持迭代开发周期。

在3)中存在一个真实元素 - 在构建软件之后识别模式并重构以隔离常见的重复元素,但我认为这是迭代开发周期的自然结果。

答案 4 :(得分:1)

首要的是,优秀的软件必须完成客户需要所做的一切,并且至少要做客户希望它做的大部分工作。这些都不是一回事。此外,最好从小而简单的东西开始,然后进化而不是试图在一个巨大的应用程序中构建所有东西。

至于其他两点,他们似乎有点困惑。避免重复是一个设计原则,但只是其中之一。为什么单独出来特别考虑?而不是(说)编程到接口?或告诉不要问?或避免破窗

... Hmmmm

当我开始输入此回复时,我打算说我认为您不能改进OO技术或设计模式。但考虑到这一点,我发现事实并非如此。在TDD实践中,初始实现是非常常见的 - 最简单的方法是让代码通过测试 - 是非常程序化的。但是,一旦代码通过其测试,就会有一个重构循环,它应用设计模式并产生更加面向对象的实现。

答案 5 :(得分:1)

我读过这本书。我认为到处都有一些错误的解释。

  1. 首先,确保软件能够完成客户希望它执行的所有操作

    本书的目的是确保在开始设计之前了解客户的要求。

  2. 完成第1步后,应用面向对象的原则和技术,以消除可能已经滑入的任何重复代码

    本书说用O-O原则进行设计

  3. 完成步骤1和步骤2后,应用设计模式以确保软件在未来几年内可维护和重复使用。

    使用设计模式。

答案 6 :(得分:1)

Great Software基于良好的设计和清晰的程序设计模式(MVC,流程组件......)。