- Cocoa バインディング-
なぜ Cocoa バインディングを使うのか?
Cocoa バインディングは、アプリケーションのデータとユーザインタフェースをつなぐ機構を提供することで、より良いアプリケーションを作る手助けをします。アプリケーションのこれら 2 つのパートをつなぐものを提供することに加えて、オブジェクト間の関係を活用したり、ソート可能なテーブルを提供したり、インテリジェントな選択機構の管理などによって、磨き上げられた、使いやすいアプリケーションを作ることも手助けします。
アプリケーション・フレームワークとして、Cocoa はすでにモデル・ビュー・コントローラのパラダイムのうち、2 つのパートで素晴らしいサポートを提供しています。モデルはアプリケーションデータをカプセル化し、ビューはデータを表示します。Foundation はモデルクラスを記述するのを助け、Application Kit はビュークラスを記述するのを助けます。しかし、モデルとビューを仲介するものは、開発者に責任があります。ユーザインタフェースをデータと関連づけ、ユーザの入力を受け付けて、それに対応するコードを書く必要がありました。簡単にいうと、モデルとビューを仲介する、コントローラを書く必要があるのです。Cocoa は、ターゲット・アクションやデリゲートのように、つなぎのコードを書くことを手助けするパターンを提供していますが、それでも開発者に、書くのも管理するのも同じことの繰り返しで退屈なコードを、たくさん書くことを要求します。なにかの仕組みがなければ、再利用可能なコントローラを書くことは難しいことです。これは、良くないアプリケーションのデザインを引き起こすでしょう。
Cocoa バインディングは、この問題を解決するためにデザインされた、Application Kit の進化の次のステップです。これは、Cocoa アプリケーションで使うことのできる、モデル・ビュー・コントローラ・パラダイムを完全にサポートするための、オプションのデザインパターンです。Cocoa バインディングのゴールは、開発者に、単純なコミュニケーション機構の上に作られる、再利用可能なコントローラオブジェクトを提供することです。Cocoa バインディングは、単純なプログラミングのためのインタフェースを持ち、開発者が利用したり書いたりするであろう、ほとんどのモデルとビュークラスをサポートし、オブジェクト間のコミュニケーションのパスを Interface Builder で設定することをサポートします。
Cocoa バインディングは、モデルとビューの間の仲介作業の大部分を担当します。開発者に求められることは、Inteface Builder 上で設定したコントローラクラスに基づいて、ユーザインタフェースオブジェクトのバインディング、実行時に値が決定される動的な属性、を設定することのみです。バインディングは、グラフィカルに設定することで、コードを書く手間を省いてくれます。そして、Inteface Builder が提供するグラフィカルな設定では物足りない場合は、Cocoa バインディングのプログラミング・インタフェースを使って、必要な挙動をカスタマイズすることができます。
コントローラは、ほぼすべての Cocoa アプリケーションにとって必要となるパートです。たとえば、多くのアプリケーションがデータを表示するのにテーブルを使います。開発者は、データをテーブルに関連づけて、ユーザにテーブルのアイテムをソートさせるロジックを書いて、ユーザの選択をプログラムで管理しないといけないでしょう。これらの要求を実装するにはたくさんの方法がありますが、コントローラで実現するのがベストです。コントローラは、データの別表現への変換や、ユーザのユーザインタフェースの選択をデータへの操作へ変換するなど、多くのサービスを提供します。
モデルとビューの中間にあるものとして、アプリケーションのモデルとビュークラスの単純さを保ちながら、コントローラは複雑なアプリケーションのデザインを可能にします。多くのアプリケーションでは、ユーザインタフェースでのユーザの選択をもとにして、ある決定を下す必要があります。たとえば、写真を編集するアプリケーションでは、ユーザに同時に複数の写真の属性を編集させることもあるでしょう。ユーザが複数の写真を選択して、コントローラがそれぞれの選択された写真のモデルの情報を、アプリケーションに提供します。
コントローラは、アプリケーションのモデルとビュー両方への、抽象化を提供します。この抽象化により、レイヤ間を移動するデータに変更を加える機会を与えることで、アプリケーションがさらにスマートになります。アプリケーションのユーザインタフェースはデータを表示しますが、多くの場合、ただデータを表示する以上のことがやりたくなるでしょう。フィルタを通してデータを表示したり(値を変換することによって)、NULL 値を認識したり(ユーザインタフェースにプレースホルダを与えることで)、データの値によってユーザインタフェースを使用可能にしたりすることなどが、求められるでしょう。コントローラは、アプリケーションをスマートにし、ユーザフレンドリーにし、書きやすく、管理しやすくするための、仲介のポイントを提供します。
一般的に、Cocoa バインディングは Cocoa アプリケーションを改善します。書いたり管理しなくてはいけないコードの量を、パフォーマンスを最適化しながら減らし、1 つ上のレベルの Cocao アプリケーションとなるような機能を追加します。