ネプラスのテックブログ。ネットワーク、クラウド、サーバなどのITインフラ情報を中心に発信中。

  1. ネプラス インフラエンジニア採用
  2. テックマガジン
  3. テクノロジー
  4. JavaにおけるMVCモデルとは?MVCモデルの3つの役割を紹介

JavaにおけるMVCモデルとは?MVCモデルの3つの役割を紹介

  • テクノロジー
  • プログラミング
公開日時:   更新日時:
JavaにおけるMVCモデルとは?MVCモデルの3つの役割を紹介
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>

    Javaエンジニア 案件・求人一覧はこちら

    MVCとは?

    MVC(MVCモデル)とは、ユーザーインターフェースを持つアプリケーションを構築する際に用いられる、コーディングのデザインパターンのことです。MVCに従ってコーディングをすることで、管理しやすく見通しの良いアプリケーションを構築することができます。特に、構造が複雑なグラフィカルユーザーインターフェースにおいて非常に有用とされ、現在においてもそのデザインパターンは広く認知されています。
     

     

    MVCを構築する3つの要素

    MVCとは、model view controllerの英単語の頭文字を取ったものです。MVCでは、アプリケーションにおける機能やデータの保存、その他のロジックなどを、model・view・controllerの3つに分けて考えます。3つの要素の役割を理解し、しっかりと役割分担をさせることが重要です。ここでは、家計簿を記録するアプリケーションを例に、model・view・controllerそれぞれの役割について説明します。

    model

    modelは主に、アプリケーションで取り扱うデータの格納、データの処理や計算、その他のロジックなど、データの保存と計算を担当します。今回の例では、家計簿に記録する金額の一時的な保存や、税金の計算、1日の支出計算などが該当します。また、新たな支出を記録した際にその日の合計金額が増える場合には、合計金額の変更を見た目に反映させるため、後述するviewに通知するという役割も担います。

    view

    viewはその名のとおり、UIへの出力を担当します。ウェブアプリケーションではHTMLやCSSなどを指し、一般的なGUIではウィジェットの階層構造を指します。modelに保存されている情報は、viewに渡されることで初めてユーザーが確認できます。今回の例では、支出をただ数値で表示するだけでなく、グラフや図などを利用してより視覚的に表示したり、配置や配色などを工夫することで、ユーザーエクスペリエンスの高いアプリケーションを構築することに繋がります。

    controller

    controllerは、UIからの入力に対する処理を担当します。ユーザーによるテキストボックスへの入力や、ボタン押下などのイベントに対するハンドラとなり、該当するモデルのメソッドを呼び出すのが主な役割です。modelのデータを直接書き換えたり、viewの描画を変更したりはしません。今回の例では、テキストボックスに新たな支出を登録した際に、model内にある合計金額を再計算するメソッドを呼び出す、が該当します。

    JavaのGUIフレームワーク

    JavaにおいてGUI(グラフィカルユーザーインターフェース)を構築する際には、MVCのデザインパターンがとても役に立ちます。一般的に、JavaでGUIを構築する際には、SwingやjavaFXなどのフレームワークを用いることがほとんどです。フレームワークが提供するAPIを利用することで、とても効率的に開発ができます。

    JavaでMVCモデルを実装してみよう

    ここではJavaでSwingを利用し、支出を登録して合計金額を計算するGUIアプリケーションを、MVCモデルに従って構築する例をご紹介します。イメージを理解することが目的なので、記載するソースコードが確実に動作することは保証しておりません。今回は説明を簡単にするため、支出を登録する機能、登録した支出の一覧を表示する機能、合計支出を計算して表示する機能の3つを実装します。

    MVCそれぞれの役割

    上記の3つの機能が、それぞれMVCモデルのどれに該当するかを考えましょう。まずmodelは、支出の保存、合計支出の計算を担当します。次にviewは、支出一覧と合計支出の表示を行います。最後にcontrollerは、新しく入力した支出のハンドラとして機能します。MVCモデルの考え方は理解できたでしょうか。それでは、実際のコーディングに入りましょう。

    modelの実装

    public class Model { private int totalSpending = 0; private ArrayList spendings = new ArrayList(); public void addSpending(int spending) { this.spendings.add(spending); this.totalSpending += spending; } public int getTotalSpending() { return this.totalSpending; } public ArrayList getSpendings() { return this.spendings; }}

    最初にモデルです。メンバとして、支出の合計を保存するtotalSpendingと、支出一覧を保存するspendingsを持ちます。また、これらのメンバにアクセスするためのゲッターを定義しています。支出を新たに追加する処理を担うのがaddSpendingメソッドです。支出を保存し、合計金額を更新します。modelが担う処理は、これですべてです。

    viewの実装

    import javax.swing.*;import java.awt.*;public class View extends JPanel { Model model = new Model(); public View() { setBackground(Color.white); setPreferredSize(new Dimension(800, 800)); } public void paintComponent(Graphics g) { super.paintComponent(g); int y = 0; model.getSpendings().forEach(spending -> { g.drawString(spending.toString(), 0, y * 10); y++; }); g.drawString(model.getTotalSpending(), 0, y * 10); }}

    viewのメンバで、先程のmodelをインスタンス化します。コンストラクタでは、背景色とウィンドウを定義しています。paintComponentメソッドは、画面上にお絵かきをしたり文字を表示するための2Dコンテキストである、Graphicsクラスを引数として受け取ることができます。この関数内でmodelのゲッターにアクセスし、modelに保存されている値をviewで表示します。

    controllerの実装

    import javax.swing.*;import java.awt.*;import java.awt.event.*; // 追加public class View extends JPanel implements ActionListener { // 追加 (略) // 追加 public void actionPerformed(ActionEvent e){ model.addSpending(テキストボックスに入力された値); }}

    今回の例ではcontrollerの処理が少ないため、viewクラスの中に記述します。上記のソースコードはあくまでイメージです。テキストボックスを用意し、ボタン押下などでactionPerformedメソッドがハンドラとして動くことを想定しています。actionPerformedメソッドでは、テキストボックスに入力された数値を、modelのaddSpendingメソッドに渡します。そうすることでmodelに支出が記録され、合計支出も更新されるという流れです。JavaにおけるMVCの簡単な例でしたが、イメージできたでしょうか。

    MVCモデルを理解して綺麗なコーディングをしよう

    MVCモデルについて理解できたでしょうか。なんとなくでも理解することで、圧倒的にコーディングが綺麗になり、良いアプリケーションを構築する土台となります。MVCモデルを意識して、最高のアプリケーションを構築しましょう。

    Javaエンジニア 案件・求人一覧はこちら
     

     

    FEnetを運営しているネプラス株式会社はサービス開始から10年以上
    『エンジニアの生涯価値の向上』をミッションに掲げ、
    多くのインフラエンジニア・ネットワークエンジニアの就業を支援してきました。
    ネプラス株式会社ロゴ

    ネプラス株式会社はこんな会社です

    秋葉原オフィスにはネプラス株式会社をはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • インフラ業界に特化

      インフラ業界に特化

      ネットワーク・サーバー・データベース等、ITインフラ業界に特化。Cisco Systemsプレミアパートナーをはじめ各種ベンダーのパートナー企業です。

      業界を知り尽くしているからこそ大手の取引先企業、経験豊富なエンジニアに選ばれています。

    • 正社員なのにフリーランスのような働き方

      正社員なのにフリーランスのような働き方

      正社員の方でも希望を聞いたうえでプロジェクトをアサインさせていただいており、フリーランスのような働き方が可能。帰社日もありません。

      プロジェクト終了後もすぐに次の案件をご紹介させていただきますのでご安心ください。

    • 大手直取引の高額案件

      大手直取引の高額案件

      案件のほとんどが大手SIerやエンドユーザーからの直取引のためエンジニアの皆様へに高く還元できています。

      Ciscoをはじめ、Juniper、Azure、Linux、AWS等インフラに特化した常時300件以上の案件があります。

    • スキルアップ支援

      スキルアップ支援

      不要なコストを削減し、その分エンジニアの方へのスキルアップ支援(ネットワーク機器貸出、合格時の受験費用支給など)や給与で還元しています。

      受験費用例)CCNP,CCIE:6-20万円、JNCIS:3-4万円、AWS:1-3万円など

      ※業務に関連する一定の資格のみ。各種条件がありますので詳しくは担当者へにお尋ねください。

    • 現給与を保証します!

      100%現給与保証

      前職の給与保証しており、昨年度は100%の方が給与アップを実現。収入面の不安がある方でも安心して入社していただけます。

      ※適用にはインフラエンジニアの業務経験1年以上、等一定の条件がございます。

    • インセンティブ制度

      インセンティブ制度

      ネットワーク機器の販売・レンタル事業等、売上に貢献いただいた方にはインセンティブをお支払いしています。

      取引先企業とエンジニア側、双方にメリットがあり大変好評をいただいています。

    • 社会保険・福利厚生

      社会保険・福利厚生

      社員の方は、社会保険を完備。健康保険は業界内で最も評価の高い「関東ITソフトウェア健康保険組合」です。

      さらに様々なサービスをお得に利用できるベネフィットステーションにも加入いただきます。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      ネプラスは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    ネプラス株式会社に興味を持った方へ

    ネプラス株式会社では、インフラエンジニアを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    オンライン面接も随時受付中。ぜひお気軽にご応募ください。

    ネプラス株式会社へのご応募はこちら↓
    ネプラス株式会社へのご応募はこちら↓

    Java新着案件New Job