1

私は 2 年の経験を持つソフトウェア開発者です。私はいくつかの「小さな」モジュールの設計と開発に携わってきました。

最近は技術面接も行っています。さまざまな問題のモデル設計を依頼されています (たとえば、Apple Genius Recommendation System など)。これまでの私の専門は、比較的小さなモジュールの開発でした。手元の設計問題にどのようにアプローチするかについて言及したいと思います。

(1) 最も重要なユースケースを認識する。

(2) 動作に基づいてシステムをモデル化するために動的モデリング (コラボレーション図など) を行う

(3) ステップ 2 で行った動的モデリングに基づいて、クラス図を作成します。

(4) より多くのユースケースを見つけて、このプロセスを繰り返します。

(5) 満足したら、同僚にレビューしてもらいます。

私はこれまで自分のプロジェクトで十分に公平に取り組んできましたが、インタビュアーはこのアプローチにあまり満足していません. 大きな問題をモデル化しているときに、何かが足りないのでしょうか?

ポインタをいただければ幸いです。

PS : 私はクラス図から始めません。そうすることで非常に集中化されたアーキテクチャを見つけることができますが、動的モデリングは設計を分散化するのに役立ちます。

4

4 に答える 4

2

高レベル モデル (モジュール) の設計または低レベル モデルの設計を依頼されましたか? 低レベルのモデル設計では通常、より小さな問題またはドメインが必要になるため、高レベルのモデル設計では大きな問題またはドメインに取り組むことをお勧めします。

通常、要件/問題は質問者 (ユーザー/インタビュアー) から生じるため、ビジネス要件を定義する必要はもうありません。しかし、システムを設計する必要があります。

ハイレベルモデル

私は「Apple Genius Recommendation System」についてよく知らないので、よくあるPoint Of Sales問題である別の問題の類推を使用します。高レベル モデルでは、システム全体を定義します。通常約:

  • 注文する
  • 注文を確定する
  • 頭金
  • 商品配達
  • 戻る

それはすべて高レベルのモデル/モジュールです。モデルを実現する方法について尋ねられた場合は、次の手順を実行します。

  1. ユーザーとシステム間の標準的なユース ケースを定義する
  2. ユース ケースを、リッチ ピクチャ (またはよく知られているもの) などの共同図に注ぎます。
  3. 例外のユース ケースを定義します。例外が簡単に定義できる場合は、すぐにモデル化してください。そうでない場合は、ビジネス チームとさらに議論するために例外をモデルにマークします。

    一部のユース ケースの例外として、コミット済み注文の変更、頭金後のコミット済み注文の変更、支払い済み注文のキャンセル、商品の在庫切れなどがあります。

  4. プロセスを繰り返します。通常、ステップ 3 はステップ 1 になる可能性があります (例外は、別のユースケースになる可能性があります)。

    たとえば、コミットされた注文の変更は、発生する変更が多いため、使用例になる可能性があります。

  5. 追加のユース ケースの例外なしで 3 番目が完了すると (すべてのユース ケースが処理されます)、通常は を追加しvalue-additional operationsます。

    これらの操作には、通知 (電子メール/画面上)、履歴データのメンテナンス、リマインダー、エラー処理などがあります。一部の操作は別のユース ケースでもある可能性があるため、1 番まで繰り返す必要がある場合があります。

    たとえば、頭金決済中にエラーが発生した場合、頭金データを手動で入力する別のユースケースが必要になる場合があります。あるいは、別のシステムでリマインダー システムを維持する必要があるかもしれません。

  6. 低レベルモデルに移動

追加情報として、私は通常、注文状態などのユースケース/機能の状態図を使用します。

低レベルモデル

低レベルモデルは、高レベルからより小さな問題に取り組みます。簡単に言うと、高レベル (おそらく順序付け) から 1 つのユース ケースを取り上げ、そこから低レベルの設計を開始します。最初にクラス図を定義するのではなく、通常、何らかの形式のシーケンス図に取り組みます。いくつかの理由を次に示します。

  1. シーケンスは、入力の取得、データの取得、および応答の提供に関する同時実行ビューを提供します
  2. データベースや Web サービスなどの他のシステムとの関係についてよく理解できます。
  3. アプリの基本的なアーキテクチャに非常に役立つ、エントリ ポイントまたはインターフェイスに関する図を提供できます。
  4. クラス図に基づいて、クラス図ではなくシーケンス設計中に落とし穴を簡単に見つけることができます

次に、システム状態図 (編集可能、表示可能など) に進みます。

最後に、 と に続きdatabase designますclass diagram

クラス図が最後のステップにあるのはなぜですか?

クラス図 (およびデータベース設計) は、プロセス全体に大きく依存しています。同時実行の発生方法、通知、外部システムとの相互作用などは、インターフェイスとクラス ダイアグラムの設計に影響を与える可能性があります。また、コードベースに最も近い設計でもあります。

これは完全に私の経験と意見です。

于 2013-10-17T11:03:21.163 に答える
2

一般的な視点/概要を述べてから、さらに深く掘り下げることが期待されるかもしれません。「Apple Genius Recommendation System」の例のように、システムの適切なアーキテクチャを決定するために、たとえばどのコンポーネントが必要かを決定するために、一般的な設計 (システムの全体像) から始める必要があると思います。 、どのプロトコルなど。コンポーネント、コネクタ、および論文の構成を特定する必要があります。次に、パターンとツールを提案することで、深く掘り下げることができます。最後に、シナリオ、ユーザー ケースなどでアーキテクチャを検証します。

于 2013-10-17T01:50:49.837 に答える
0

あなたの質問から私が収集したことは、あなたが概説した「方法論」や「プロセス」ではなく、 「モデル」を求めているということです。

したがって、彼らがしなければならないことは、Apple Genius Recommendation System がさまざまな問題を処理できるシナリオを (おそらく UML を使用して) 設計することだけです。ヒント、この場合、設計の主要部分は、問題に関連するコアインターフェイス メソッドを含むProblemという名前のインターフェイスを持つことです。たとえば、getSeveritygetDescriptiongetDateReportedgetDateSolvedなどです。当然のことながら、設計を完了するには、このインターフェイスと連携する他のクラスが必要になります。

上記がお役に立てば幸いです。

于 2013-10-15T17:45:39.990 に答える