遅い→起動時

http://d.hatena.ne.jp/pmint/

クラス構成を再編したペイントツール プロトタイプ12

d:id:pmint:20080408:p2の続き。


クラス構成を現時点のものに。
特にプラグインのためのクラスを追加した。

ペイントツール プロトタイプ12。
WindowsApplication1.zip

起動はここからClickOnceで。ClickOnceIE系で。
WindowsApplication1

操作

左ドラッグ(右でも可)
線を描く。

クラス構成


呼び出され順は…

  1. Canvasが持つPanel
    Windowsからのイベント(Event)を受ける。
    コンポジション集約なので、はっきり言ってCanvas
  2. Queue
    独立したスレッドで動作する入力バッファ。
  3. InternalEvent
    .NET FrameworkのEventに独自のデータを付け加えたもの。
    アプリが利用するEventそれぞれに対応。拡張点。
  4. Tablet
    CommandパターンでのInvoker。
  5. Command
    CommandパターンでのCommand。
    サブクラス多数。拡張点。プラグイン
  6. Brush
    描画処理の中枢。
    サブクラス多数。拡張点。プラグイン
  7. Canvas
    絵を保持している。
    イベント(Event)を受けるクラスと同一。


MVCで表せば…

  1. V(Canvasが持つPanel)
  2. V(Queue)
  3. C(InternalEvent)
  4. M(Tablet)
  5. C(Command)
  6. M(Brush)
  7. M(Canvas)

Canvasは元々M(モデル)にあたるクラスだけど、画面上に表示するのも「キャンバス」なわけで、「ユーザーコントロール」として実装した。V(ビュー)としても使う。このクラス内だけでVからMを直接呼び出してはいない。


Canvasから始まりCanvasで終わっているので、Canvasクラス内だけで完結するような処理を複雑にやっていることになる。
この複雑さはプラグインのため。




後はプラグインのためのUIを担うPaletteクラスと、プラグインの探索と読み込みを行う何らかのクラスを実装すれば、プラグインのための仕組みができあがる。
プラグインの読み込みはBrushなどのクラスとPaletteクラスの両方に依存するので、コントロールクラスであるAppクラスだろうか。