java - 设计复杂系统的两种方法 : Top-down vs Bottom-up

标签 java oop architecture methodology

我要设计一个复杂的系统。 我有两种方法:

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

  2. 自下而上:我会写代码让系统运行起来。之后,我将从实体代码中提取接口(interface)和契约。精炼的界面和契约是我的设计。规则是“让它运行,让它正确”。

什么是更好的方法?在我看来,我会选择Bottom-up。因为Top-down非常难,没有人可以在高抽象层次上设计很多接口(interface),至少对我来说很难。当我编写可靠的实现来验证最初的设计时,有很多不合理的地方迫使我从头开始重新设计。而我使用Bottom-up的时候,我觉得还是挺“安全”的,至少能跑起来。

最佳答案

正如其他人所说,它通常是混合的。在更实际的层面上,以下方法通常会有所帮助:

  • 从自上而下的抽象开始。即,将系统/设计分解为逻辑组件以解决任务。但是不要为这些组件设计精确的最终接口(interface)。递归地进行,直到您到达的某些组件具有“实现可能”的大小(例如,是单个函数/方法/类的大小)

  • 然后,自下而上地浏览生成的组件列表,并开始设计接口(interface)/契约的初稿。

  • 然后,自下而上地浏览生成的组件列表,并开始实现它们。这将使您能够:

    • 立即拥有可运行且可测试的代码(无需等待底层组件实现后进行测试)

    • 您可以根据已完成的较低级别组件的需求,为较高级别组件合成最终版本的接口(interface)/契约。

关于java - 设计复杂系统的两种方法 : Top-down vs Bottom-up,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4969152/

相关文章:

java - 类似于 Swift 中的 'String.indexOf("text")' 函数

java - 父类方法如何返回子类类型?这不违反继承吗?

design-patterns - 我可以使用什么架构来处理购物车,其中每个产品都需要保存不同的属性

c# - MVVM 设计感觉太笨重,我做错了吗?

java - CensoredWriter cw = new CensoredWriter(System.out, "whine|whining");

java - 如何在java中的文本文件上写无符号短

java - 在foreach中传递3个数组

ruby-on-rails - Rails 代码段解释

oop - 我应该使这些方法成为非静态的吗

architecture - 良好的建筑面试问题