Architecture 自上而下还是自下而上的设计?

Architecture 自上而下还是自下而上的设计?,architecture,Architecture,设计一个系统基本上有这两种方法。优点和缺点是什么?我什么时候应该用哪个?我应该结合这些方法吗?如何实现?大致来说,自上而下是将问题空间分解为子问题,而自下而上是将解决方案空间的一部分组织成更大的块 为了能够有效地使用自上而下的方法,您需要对问题有非常坚实的理解,即手头有坚实的需求。为了使自底向上的方法有效,您需要解决一个“标准”问题,该问题的各个部分都是众所周知的,但具体的装配可能需要一些实验才能正确进行 你应该阅读帕纳斯的精彩论文,了解更多关于这个问题的信息。答案是:在适当的情况下,两者都使用

设计一个系统基本上有这两种方法。优点和缺点是什么?我什么时候应该用哪个?我应该结合这些方法吗?如何实现?

大致来说,自上而下是将问题空间分解为子问题,而自下而上是将解决方案空间的一部分组织成更大的块

为了能够有效地使用自上而下的方法,您需要对问题有非常坚实的理解,即手头有坚实的需求。为了使自底向上的方法有效,您需要解决一个“标准”问题,该问题的各个部分都是众所周知的,但具体的装配可能需要一些实验才能正确进行


你应该阅读帕纳斯的精彩论文,了解更多关于这个问题的信息。答案是:在适当的情况下,两者都使用。当你完成时,让它看起来像(在你的规范、设计文档和用户文档中)你做了所有自上而下的事情。

你还应该看看敏捷社区的“切蛋糕”原则。这一原则迫使您在应用程序的每次迭代中都将重点放在为用户增加业务价值上。您尝试设计和实现应用程序的一个垂直部分并交付它,然后关注下一个部分等等


这里有一个更详细地解释这一原则的链接

我认为你的问题应该得到详细的回答。 我建议读一篇Martin Fowler(cfr)“设计死了吗?”)的老文章,其中讨论了前期设计和敏捷技术的关系()


我的经验是总是有一个模块的蓝图架构,系统组件之间的交互。有了这个蓝图(在某些项目中可能是高水平的),我开始设计/开发模块/组件。其中一些问题也可以自下而上开发。

这是一个简短的问题,但我怀疑答案会很长!。。。我更喜欢从左到右的设计。@Mitch Wheat可能是,也可以部分回答或重定向到一些书籍/论文/文章/博客就足够了:)@Matti Virkkunen我不认为这只是你建议的选择问题,开发例如银行系统我不会尝试自下而上…非常感谢你给出了一个好的答案并链接到那篇论文+1:因为«当你完成时,让一切看起来都像你做了自上而下的事情»谢谢你,我知道迭代,我想难点在于如何将蛋糕切成薄片,这样添加另一块蛋糕就不会像添加前几块蛋糕那样困难了。很好的参考资料总是很受欢迎:)