6


3

トップダウンv。 ボトムアップ設計アプローチ

_ 重複:https://stackoverflow.com/questions/130933/design-coding-top-to-bottom-or-bottom-to-top [デザインとコーディング-上から下、または下から上?] _

私は最近の経験から、ソフトウェアを他の同僚とは異なる方法で設計していることに気付いたと思います。 私はソフトウェアのコンポーネントの高水準の考えを得るのに十分な要件を集めた後に増分ボトムアップアプローチをとる傾向があります。

したがって、複数の具象クラスをサポートするインターフェースを設計する場合は、具体的な候補ごとに共通する点を調べ、具体的な作業をどのようにして実行するかを確認します(堅牢性を考えながら)。将来のコンクリートのために)。 それから私はその共通点を取り入れてインターフェースを作ります。

トップダウンアプローチの場合、デザイナーはインターフェースのクライアントサイドと、クライアントがどのようにインターフェースと対話するかを見てから、具象クラスを実装しようとすると思います。

そのため、トップダウン/ボトムアップの長所と短所がわかります。 以前の経験に基づいて、どちらがより効率的で、より良い結果が得られるかを知りたいですか。

注:私は開発手法(アジャイル、ウォーターフォールなど)については話していません。設計手法について話しています。

5 Answer


15


私は、優れたソフトウェア設計者(そして私の意見では、すべてのソフトウェア開発者もあるレベルのソフトウェア設計者であるべきだ)にとって、魔法はトップダウンとボトムアップを同時に行えることにあると信じています。

私のメンターが「学んだ」ことは、まず始めに非常に短いトップダウンで関係する実体を理解し、次にボトムアップに移動して作成したい基本的な要素を見つけ出し、次にバックアップしてどのように自分のボトムアップの結果について私が知っていることを知っているというように、「中間で会う」までなど、1つ下のレベルに進むことができます。

お役に立てば幸いです。


4


それは問題によります。

問題が何であるか(顧客がオンラインの銀行取引明細書を参照できるようにすること)、およびその解決方法がわかっている場合は、ボトムアップアプローチを使用します。 各ステップを分析し、これらをエリアごとにまとめてソリューションを開発します。 プロジェクト計画ベース。

あなたが問題について漠然とした考えを持っているならば[フィールドエージェントが分散されたオフライン/オンラインのウィキを介して通信することを可能にする]それからトップダウンのアプローチはよりうまくいくでしょう。 全体的な問題とそれらを解決するために使用できるステップを調べてください。 試行錯誤。 アジャイル


4


ソフトウェアを設計するための完璧な方法はありません。 完璧なデザインを保証するアプローチはありません。

そのための解決策を設計するときには、さまざまな方法で問題を検討する必要があります。また、設計があるときは、さまざまな方法でその問題を検討する必要があります。 下から近づいたときと同じように上から近づいても同じデザインにはなりません。 両方を実行し、両方の方法で得られる利点を選択して選択してください。

問題を最高レベルで理解し、解決策をたどって詳細が設計を変更する可能性がある部分(最低レベルからアプローチして元に戻す詳細)を特定します。 問題なく動作するのに十分なデザインになるまで、問題のすべての要素を繰り返し調べます。

http://cc2e.com/[Code Complete]第5章は、私がここで言っていることの詳細を打ち出すのに本当に役立ちます。 ぜひご覧ください。


2


私はあなたの質問を正しく理解したかどうかはわかりませんが、私が知っているならば、アプリケーションの構築とインタフェースの構築、それから実際に機能するようにアプリケーションを構築することの賛否両論を求めています。

その答えの大部分は、あなたが開発している/設計している人によって異なります。 クールで(そしておそらく)便利なアプリをユーザーに提供することがあなたの目標ですか? UIから始めましょう。 それとも、ビジネスシステムへのインタフェース(すでに存在している可能性がある)を構築しようとしているのか、それとも既に実行されているタスクを他の(効率の低い)方法で完了しようとしているのですか? タスクから始めましょう。


0


ボトムアップは、私たちの多くがコーディングしているものです。 選択を通してではなく、知性を通して。 Petzoldはこの ここについての記事を書きました。

実際には、大多数の建築家がこのように設計していると思うでしょう。 私は個人的に私が今まで誰かがデザインを他の方法で行うのを見たことがないと思います(具体的から抽象的へ)。

確かに、要件は具体的ですが、一般的には抽象化を指示し、ソフトウェアの目的と意図を定義するために要件を使用します。