home link download back number special issue

HMDT - Link / Macintosh / ADC / Document / Cocoa / Program Design / Application Architecture


Application Architecture

Cocoa のアプリケーションアーキテクチャについて解説したドキュメントだ。AppKit を使ってアプリケーションを作ったときの、さまざまな利点に付いて書かれているよ。

目次

  1. The Contents of a Cocoa Application
  2. The Model-View-Controller Design
  3. Document Architecture
  4. Scripting
  5. Undo and Redo
  6. Features of a Cocoa Application
  7. The Event and Drawing Cycle
  8. The Primary Application Classes

Link

HTML バージョン
http://developer.apple.com/techpubs/macosx/Cocoa/TasksAndConcepts/ProgrammingTopics/AppArchitecture/index.html

要約

Cocoa アプリケーションの中身

Cocoa アプリケーションのファイルってのは、実はバンドルだ。ほんとはディレクトリなんだけど、Finder で見ると、ひとつのファイルに見えるぜ。.app って拡張子がついているんだ。詳しいことは、Inside Mac OS X : System Overview を見てくれ。


Model-View-Controller デザインパターン

Apple は Cocoa にいろんな機能を付け加えたんだけど、Model-View-Controller (MVC) デザインパターンは重要だぜ。これを使っておくと、あとで楽になるよ。

MVC 自体は古いアイディアでさ、これを使うと、クラスを Model、View、Controller の 3 つに分類することになるんだ。Model ってのは、データと、それに対するアルゴリズムを受け持つところ。View は、データをユーザに表示するところ。実際に画面に描く、っていうことね。Controller は、Model と View の間の橋渡し役だ。普通の Cocoa アプリケーションだと、Controller のコードがすごく多くなるんだよね。だから View-Controller と Model-Controller に分けるのがいいよ。


ドキュメントアーキテクチャ

AppKit のドキュメントアーキテクチャは 3 つのクラスからできているんだ。NSDocument と NSWindowController と NSDocumentController だ。

NSDocument はデータの保存や読み込みを受け持つ。Model-Controller として考えることができるね。NSWindowController は、ユーザインタフェースの Controller になるんだ。つまり View-Controller だ。よく、nib ファイルのファイルオーナーになるんだよね。NSDocumentController は、NSDocument を管理する。ドキュメントを開くときとか、新しいドキュメントを作るときに使われるんだ。デベロッパは、普通このクラスのサブクラスを作んないよ。

よく使われるパターンのうち、いちばん単純なのは、ドキュメントが 1 つのウィンドウしか持たなくて、しかも WindowController を作るまでもない、ってぐらい単純なときだ。この場合は NSDocument のサブクラスを作って windowNibName をオーバーライドしてやればいい。こいつは、ウィンドウのタイトルを返す。

ウィンドウは 1 つだけど、もうちょっと複雑なことをやらせたいときは、NSWindowController のサブクラスを作るのがいい。このときは、NSDocument の、windowNibName の代わりに、makeWindowControllers をオーバーライドする。この中で NSWindowController を作って、addWindowController: で追加してやるんだ。

もっと複雑になって、ウィンドウが複数のときは、上と同じで makeWindowControllers をオーバーライドするんだけど、そこで複数の NSWindowController を作ってやればいいんだ。

あと、ドキュメントアーキテクチャを使えば、自動的にドキュメントに対するスクリプティングに対応したことになるよ。


アンドゥとリドゥ

Cocoa フレームワークは、アンドゥとリドゥの実装をサポートしているんだ。NSUndoManager を使う。これの基本は、何かをする度に、それを取り消すにはどうしたらいいか?ってことを NSUndoManager に登録していくんだ。たとえば、setColor: っていうメソッドを使って、色を変えるとしよう。そしたら、変える前に、

[[undoManager prepareWithInvocationTarget:self] setColor:oldColor]

って呼んでやるんだ。これで、ユーザがアンドゥしたときに、setColor: が oldColor と共に呼び出される。

ドキュメントアーキテクチャを使うと、アンドゥに関するいくつかのことが自動的に行われる。たとえば、NSDocument は NSUndoManager を持っているし、アンドゥの状態を管理していたりするんだ。

アンドゥへの登録は、きっと Model レイヤでいっぱい行われるんだ。だから、Model のメソッドを、基本的なやつと、その拡張に分けておくと便利だ。基本的なやつが呼び出される度に、それへのアンドゥを登録しておけばいいんだ。

もちろん Conroller でもアンドゥマネージャを呼び出すことがある。たとえば、そのときのアンドゥの項目によって、取り消しメニューの名前を変えるときとか。これには setActionName: を使うんだ。


Cocoa アプリケーションの仕様

Cocoa フレームワークを使えば、自動的にいろんな機能が付いてくるんだ。たとえば、ウィンドウの管理とワークスペースへの統合、イベントの取り扱い、メニューの管理、テキストとフォントのサポート、コントローラの挙動の管理とかね。うーん、楽ちん。


Home | Link | Download | Back Number | Speciall Issue

mailto: mkino@xd5.so-net.ne.jp

HMDT