05 Mar 2014, 12:29

[RubyTk] GUIアーキテクチャの定番MVCをRubyTkで実装してみる

MVCについて勉強したので、実際にRubyTkに応用してみる。

MVCとは

MVCとは、アーキテクチャの一つ。 Model-View-Controllerの略。 ユーザ・インタフェースをもつアプリケーションをうまくつくるための設計方法。

詳しい解説は、リンク先に譲るとする。

MVCアーキを利用すると、

  • 仕様変更につよい
  • 移植がしやすい

などのメリットがある。

また、テストが書きやすいという利点もある。 RubyTkライブラリがからむとviewのテストがかけない。 tkライブラリは論理的な処理から切り離したい。

MVC実装例

ボタンをおすと、ファイルからデータを読み出して、画面に表示するアプリケーションをつくる。

MVC以前

<div class="outline-text-3" id="text-2-1">
  <p>
    普通の実装。
  </p>

  <p>
    </div>
  </p>
</div>

<div id="outline-container-sec-2-2" class="outline-3">
  <h3 id="sec-2-2">
    MVCの実装
  </h3>

  <div class="outline-text-3" id="text-2-2">
    <p>
      Model, View, Controllerの3つにクラスを分割して実装。
    </p>

    <p>
      </div>
    </p>
  </div>

  <div id="outline-container-sec-2-3" class="outline-3">
    <h3 id="sec-2-3">
      proc, lambdaを導入する
    </h3>

    <div class="outline-text-3" id="text-2-3">
      <p>
        上の例だと、ViewとControllerの間に依存関係がある。これをなくしたい。
      </p>

      <p>
        Rubyでコールバックやハンドラの仕組みを導入するためにはどうすればいいのだろうか?
      </p>

      <p>
        答えは、procやlambdaを利用すればうまくできた!といっても、完全に依存関係がなくなったわけではないけど。
      </p>

      <p>
        感性的にこっちの方が美しく感じる。
      </p>

      <p>
        </div>
      </p>
    </div>

    <div id="outline-container-sec-2-4" class="outline-3">
      <h3 id="sec-2-4">
        Links
      </h3>

      <div class="outline-text-3" id="text-2-4">
        <ul class="org-ul">
          <li>
            <a href="http://stackoverflow.com/questions/1677861/how-to-implement-a-callback-in-ruby">How to implement a &#8220;callback&#8221; in Ruby? &#8211; Stack Overflow</a>
          </li>
        </ul>
      </div></p>
    </div></p>
  </div>