2012年5月7日月曜日

【AS3.0】アプリケーションフレームワークをつくってみた。



ActionScript3.0でアプリケーション用のフレームワークをつくってみた。
Github- Framingo
アプリケーション設計の勉強と、ActionScriptを触り始めてちょうど2年半くらいになるのでそのまとめという意味で、アプリケーションプロトタイピング用の、フレームワークをつくってみました。基本的には自分が使う用、もしくは学習したナレッジの蓄積用として継続的に開発していくつもりです。

世に言うMVCというのを意識してつくったつもりですが、いろいろ調べていくと割と曖昧で、結局なにがMVCなのかっていうのは未だに消化しきれていない感じです。
FlashだとViewの部分を扱う事が多いような気がしますが、処理系が複雑になっていくにつれて、どのように整理してコードを実装して良いのかが、わからなくなってしまう事があったりもしたので、できるだけ見た目が変化する処理の部分と、オンメモリで扱うアプリケーションのデータに対する操作を切り離せるようにしたつもりです。

実装上の主なコンセプトは

  1. ユーザーのアクションに対して、一対一の動作をアプリケーションが行うようにする。
  2. IDEと連携した作業もしやすいようにする。
  3. シンプルな処理の仕組みだけを提供し、なんでもできてしまうような便利メソッドはできるだけ提供しない。
  4. 素早い実装と、コード管理のしやすさを目指す。

こんな感じです。現在バージョンはver 0.1となっていますが、現在はようやく動作するという感じです。まだ実装しきれていない部分や、まったく実装のないクラスなどがいくつかあったりします。プロトタイピング用を目指しているので、さっと実装できるのが良いと思っているのですが、現状結構めんどうくさくて解りにくいです。
XMLで記述して、アプリケーションのひな形やシーン構成が作成できるようにしようと思っていますが、現在は以下のクラスの特定メソッドを必要に応じて継承しないと例外が出るつくりになっています。

src/framingo/core/FMCoreClass.as
src/framingo/model/manager/DataManager.as
src/framingo/model/process/AbstractProcess.as
src/framingo/model/process/ProcessFlow.as
src/framingo/view/factory/SceneFactory.as


また、テストコードやサンプルコード、ドキュメントに関しては、順次整理しようと思っています。まだまだ稚拙な実装は多いと思うので、順次ブラシュアップしていければと思っています。

以下クラス構成

.
`-- framingo
    |-- core
    |   |-- FMApplication.as
    |   |-- FMCoreClass.as
    |   |-- FMCoreSetting.as
    |   |-- config
    |   |   `-- FMVersion.as
    |   |-- error
    |   |   |-- ErrorManager.as
    |   |   `-- UnimplementedError.as
    |   |-- log
    |   |   `-- Logger.as
    |   `-- system
    |       `-- SystemManager.as
    |-- data
    |   |-- AbstractDataGroup.as
    |   |-- AbstractProcessData.as
    |   |-- SceneDataGroup.as
    |   `-- action
    |       |-- AbstractAction.as
    |       |-- ActionSync.as
    |       |-- FlowAction.as
    |       |-- IDataTransfer.as
    |       |-- RenderAction.as
    |       `-- SceneAction.as
    |-- model
    |   |-- events
    |   |   |-- FlowEvent.as
    |   |   |-- ProcessActionEvent.as
    |   |   `-- ProcessEvent.as
    |   |-- factory
    |   |   `-- FlowFactory.as
    |   |-- manager
    |   |   |-- DataManager.as
    |   |   `-- ModelManager.as
    |   `-- process
    |       |-- AbstractProcess.as
    |       `-- ProcessFlow.as
    |-- presenter
    |   |-- ActionPresenter.as
    |   |-- IActionReceivable.as
    |   `-- IThrowableAction.as
    `-- view
        |-- events
        |   |-- ActionObjectEvent.as
        |   |-- RenderObjectEvent.as
        |   |-- SceneEvent.as
        |   `-- SceneManagerEvent.as
        |-- factory
        |   `-- SceneFactory.as
        |-- interactive
        |   `-- ActionObject.as
        |-- manager
        |   |-- DialogManager.as
        |   |-- SceneManager.as
        |   `-- ViewManager.as
        |-- render
        |   |-- IRenderableData.as
        |   `-- RenderObject.as
        `-- scenes
            |-- AbstractScene.as
            `-- SceneChildren.as

0 件のコメント:

コメントを投稿