Architecture 自上而下。自下而上的设计方法

Architecture 自上而下。自下而上的设计方法,architecture,Architecture,复制: 我想我在最近的经历中发现,我的软件设计与大多数同行不同。我倾向于在收集了足够的需求以获得软件中组件的高层次概念后,采用自底向上的增量方法 因此,在设计一个支持多个具体类的接口的情况下……我会看看每个具体候选类的共同点,询问如何完成每个具体类的工作(同时考虑对未来的具体类保持健壮性)。然后,我利用这组共性,创建一个接口,我认为这是一种“自下而上”的方法 在采用自顶向下方法的情况下,我相信设计人员会查看接口的客户端以及客户端如何与接口交互,然后尝试实现具体的类 所以我可以看到自顶向下/自下而

复制

我想我在最近的经历中发现,我的软件设计与大多数同行不同。我倾向于在收集了足够的需求以获得软件中组件的高层次概念后,采用自底向上的增量方法

因此,在设计一个支持多个具体类的接口的情况下……我会看看每个具体候选类的共同点,询问如何完成每个具体类的工作(同时考虑对未来的具体类保持健壮性)。然后,我利用这组共性,创建一个接口,我认为这是一种“自下而上”的方法

在采用自顶向下方法的情况下,我相信设计人员会查看接口的客户端以及客户端如何与接口交互,然后尝试实现具体的类

所以我可以看到自顶向下/自下而上的优点和缺点。我只是想知道,根据你以前的经验,哪一个更有效,效果更好


注:我不是在谈论开发方法(敏捷、瀑布等),我是在谈论设计方法。

我相信,有了好的软件设计师(我认为所有软件开发人员也应该是某个级别的软件设计师),神奇之处在于能够同时做自顶向下和自下而上的工作

我的导师“教导”我要做的是,从简单的自上而下地理解所涉及的实体开始,然后自下而上地找出我想要创建的基本元素,然后后退一步,看看我如何能够降低一个层次,知道我对自下而上结果的了解,等等,直到“他们在中间相遇”


希望能有所帮助。

这取决于问题

如果您知道问题是什么[允许客户查看在线银行对账单],以及如何解决问题,请使用自下而上的方法。分析每个步骤,按区域将其分组并制定解决方案。以项目计划为基础


如果您对这个问题有模糊的认识[允许现场代理通过分布式离线/在线wiki进行通信],那么自上而下的方法会更好。看一看整体问题以及可以使用哪些步骤来解决这些问题。反复试验。敏捷。

设计软件没有完美的方法。任何方法都不能保证完美的设计

在为问题设计解决方案时,您必须以不同的方式来看待问题,而当您进行设计时,您也应该以不同的方式来看待问题。如果你从顶部接近它,你不会像从底部接近它一样得到相同的设计。因此,两者都要做,并选择这两种方法给你带来的好处

从最高层次理解问题,并逐步解决问题,确定细节最终可能会改变设计的部分(您应该从最低层次开始处理细节,然后以自己的方式进行备份)。不断迭代问题的所有组成部分,直到你有了一个足够好的设计


第五章确实可以帮助我把我在这里所说的细节敲定。我建议你看一看。

我不确定我是否正确理解了你的问题,但如果我理解了,你是在问构建应用程序然后构建接口的利弊,而不是构建接口然后构建应用程序以使其真正起作用


我想说,答案很大程度上取决于你为谁开发/设计。你的目标是为用户提供一个酷且(或许)有用的应用程序吗?从UI开始。或者,您是在尝试构建业务系统的接口(可能已经存在),还是在尝试完成已经以其他(效率较低)方式执行的任务?从任务开始。

自下而上是我们很多人编写的代码。不是通过选择,而是通过理智。佩佐尔德为此写了一篇文章

在实践中,我想你会发现大多数建筑师都是这样设计的。我个人认为我从未见过有人以相反的方式(从具体到抽象)进行设计


当然,需求是具体的,但人们通常使用需求来指导抽象,并定义软件的目的和意图。

+1同意-没有“一种解决方案”,只有两种方法的混合才能解决这个问题