Model-View-Controller(MVC)は、ユーザーインターフェイスロジックをビジネスロジックから分離する基本的なデザインパターンです。Model-View-Controller(MVC)パターンは、アプリケーションを3つの異なるコンポーネントに分割する方法です。モデル、ビュー、およびコントローラー。
UMLモデリングを使用したMVCフレームワーク
このモデルビューコントローラーは、ステレオタイプのUML表記法のロバストネス分析を使用して視覚的に最もよく説明できます。これは、受賞歴のある著書Object-Oriented Software Engineering(以下の参照を参照)でIvar Jacobsonによって最初に提案され、Doug Rosenberg etalによってさらに説明されています。 。彼の著書「ユースケース駆動型UMLオブジェクトモデリング」で。
これは、MVCの単純で架空のシーケンス図です。上の図に示されているのは、Webユーザーがクエリを開始し、コントローラーによって処理されるイベントを生成して、モデルから必要な情報を取得し、情報を検証して、結果セットをビューに戻すことです。
エンティティオブジェクト(モデル)は、境界オブジェクトが探している情報またはデータにすぎません。これらは、データベーステーブル、Excelファイル、「一時的な」セッション、キャッシュされたデータなどです。
- 時間の経過とともに存在し、主に永続的な状態に関係するオブジェクトについて説明します。
- 通常、ドメインモデルのオブジェクト
- 追跡して保存する必要があるもの
境界オブジェクト(ビュー)は、アクター(ユーザーなど)がソフトウェアシステムで通信するオブジェクトです。これらのオブジェクトは、システム内の任意のウィンドウ、画面、ダイアログ、メニュー、またはその他のユーザーインターフェイスである可能性があります。ユースケースを分析するときに、それらを簡単に識別できます。
- システムと通信する環境との間の接続を記述します。
- システムと通信するときにアクターによって使用されます
- エンティティオブジェクトのみがイベントを開始できます
- (通常、画面などの主要なユーザーインターフェイス要素)
コントロールオブジェクト(コントローラー)は、ビジネスオブジェクトまたはビジネスWebサービスです。ここで、ユーザーに提示するデータ(ユーザーが求めるもの)をフィルターで除外するために使用されるビジネスルールをキャプチャします。したがって、コントローラーは実際にビジネスロジックとデータ変換を制御しています。
- 特定のユースケースでの動作を説明します。
- 境界オブジェクトとエンティティオブジェクト間の「接着剤」
- ビジネスルールとポリシーをキャプチャする
- (注:多くの場合、他のオブジェクトのメソッドとして実装されます)
MVCモデルの接続ルール
境界オブジェクトとエンティティオブジェクトは名詞であり、コントローラーは動詞であると考えてください。
接続の4つの基本的なルールは次のとおりです。
- アクターは、境界オブジェクトとのみ対話または通信できます。
- 境界オブジェクトは、コントローラーおよびアクターとのみ通信できます。
- エンティティオブジェクトは、コントローラーとのみ対話できます。
- コントローラは、境界オブジェクトやエンティティオブジェクト、および他のコントローラと通信できますが、アクターとは通信できません。
境界オブジェクトとエンティティオブジェクトはどちらも名詞であり、コントローラーは動詞であることに注意してください。名詞は他の名詞と話すことはできませんが、動詞は名詞または動詞と話すことができます。
一目でわかるロバスト性分析図
次の簡単なユースケースの説明がテキスト形式であるとします。
生徒の詳細ページから、教師が[コースの追加]ボタンをクリックすると、システムにコースのリストが表示されます。教師はコースの名前を選択し、「登録」ボタンを押します。システムは学生をコースに登録します。
これで、上記のユースケースに従って簡単な堅牢性図を作成できます。
テキストラベルを使用して、堅牢性図の右側にユースケースの説明を添付することもできます。
ロバストネス分析を作成するための5つのステップ
- ユースケースのテキストをたどって、ユースケースの堅牢性分析を実行します。
- 一度に1つの文、およびアクター、適切な境界、エンティティオブジェクトとコントローラー、および図のさまざまな要素間の接続を描画します。
- 基本コースとすべての代替コースを1つの図に収めることができるはずです。
- 堅牢性の図を確認する人は誰でも、ユースケースのテキストの一連のアクションを読み、図の関連付けとともに指をなぞり、テキストと画像の明確な一致を確認できるはずです。
おそらく、これを行うときにユースケーステキストを書き直して、あいまいさを取り除き、境界オブジェクトとエンティティオブジェクトを明示的に参照する必要があります。ほとんどの人は、最初のドラフトで完璧なユースケーステキストを書きません。したがって、堅牢性分析を使用して、ユースケーステキストと図の間のギャップを埋めることができます。
MVCシーケンス図を使用してユースケースシナリオを開発する
ロバストネス分析に基づいて、MVC形式の関連するシーケンス図のセットを使用して、ユースケースシナリオ(通常または代替)を開発できます。同様に、MVCシーケンス図には、インターフェイスオブジェクト、コントローラーオブジェクト、およびエンティティオブジェクトがあります。
- エンティティは、システムデータを表すオブジェクトです:顧客、製品、トランザクション、カートなど。
- 境界は、システムアクター(UserInterface、DataBaseGateway、ServerProxyなど)とインターフェイスするオブジェクトです。
- コントロールは、境界とエンティティの間を仲介するオブジェクトです。
それらは、境界オブジェクトを介してエンティティと対話することにより、境界からのコマンドの実行を調整します。コントローラオブジェクトは、多くの場合、ユースケースシナリオに対応し、多くの場合、シーケンス図で表されます。
上記のロバストネス分析図のように、MVCシーケンス図のライフラインにステレオタイプを使用して、MVCで使用しているオブジェクトのタイプを視覚的に明確にすることができます。
MVCシーケンス図の例
人を検索できるアプリケーションを考えてみましょう。UIには、ユーザーが検索文字列を入力できるテキストフィールドが必要であり、検索を開始するためのボタンがある場合があります。最後に、検索結果が表示される領域が必要です。私たちの場合、それはリストコンポーネントで実装されています。
「人の検索」のユースケースシナリオは次のとおりです。
- ユーザーがテキストフィールドに検索文字列を入力します
- ユーザーが検索ボタンをクリックします。
- 検索結果が結果リストに表示されます。
上のシーケンス図は、結果が最終的にリストコンポーネントに表示されるまで、ユーザーのボタンクリックがアプリケーション内をどのように移動するかを示しています。
参考文献