2011-02-11 105 views
5

我有一个复杂的系统设计。 我有两种方法:两种方式来设计复杂的系统:自顶向下VS自下而上

  1. 自上而下:我会设计很多的接口和契约。之后,我将实现这些接口,并编写一个原型来验证设计。

  2. 自下而上:我会编写代码让系统运行。 Afterwords,我会从实体代码中提取接口和合约。蒸馏的接口和合同是我的设计。这是规则“使它运行,使其正确”。

什么是更好的方法?从我看来,我会选择自下而上。由于自顶向下非常困难,所以没有人可以在高抽象层次上设计很多接口,至少对我来说很难。当我编写可靠的实现来验证最初的设计时,有许多不合理的事情迫使我从头开始重新设计。当我使用自下而上时,我感到相当“安全”,它至少可以运行。

回答

6

正如其他人所说,它通常是一个组合。在一个更实际的层面上,下面的方法通常有助于:

  • 开始转到摘要自上而下的。也就是说,将系统/设计分解成逻辑组件来解决任务。但是不要为这些组件设计精确的最终界面。递归地继续进行,直到您到达的某些组件的大小为“实现可能”大小(例如,是单个函数/方法/类的大小)

  • 然后,执行生成的组件列表Bottom-Up,并开始设计界面/合同的初稿。

  • 然后经过合成组件列表自下而上,并开始实施它们。这将允许您:

    • 有一个工作和测试的代码马上(无需等待底层组件来实现测试)

    • 可以合成接口/合同的最终版本基于已完成的较低级别组件的更高级别的组件。

2

除了在最微不足道的设计事情远没有这样简单。我发现大多数设计都需要两种方法的混合才能完善。

0

我个人也比较喜欢自下而上 - 第一,因为你总是在做自上而下的时候忘了什么东西,然后要解决这个问题,并第二,因为至少在我的情况,我有很多好的想法,整个系统在设计单来自底部的组件。

问候, 洛伦茨

0

在现实世界中是几乎impossibile使用这些简单的方法来设计系统。你必须在多次迭代中使用它们。

但是,这是一个简单的答案,太多。

1

在我看来,自顶向下的设计比自下而上一个更自然。例如:当你设计一个系统时,主要是你定义它的功能(设计接口和契约),然后你指定系统的实体,实现它们之间的关系等......当然,自顶向下的设计比自下而上的,它需要经验丰富的开发人员。