トップページ > 1. ドキュメント > 1.1. 概要 > フレームワーク概要

フレームワーク概要

タスク志向フレームワーク

 CharcoalPHPは「タスク」をベースとしたフレームワークです。「タスク」とはWebアプリケーションに限らず、何かのきっかけ(アクション)に対する処理を行うもので、一連のまとまった処理単位のことを指します。アーキテクチャはWebアプリケーションに依存していないため、バッチ処理、cron、AJAXなど様々な用途に無駄なく対応することができます。

Framework Flow Digest

Framework Flow Digest

タスク間の依存性を最小限にする「イベント」

 CharcoalPHPでは処理の実体である「タスク」は「イベント」を契機に駆動します。たとえば一般的なWebアプリケーションではクライアントからのHTTPリクエストがイベントに変換され、処理されます。タスク側では発生したイベントに対応する処理を記述していきます。タスク内部からもイベントを発行できます。 HTMLの出力に関して、CharcoalPHPでは「レンダリングタスク」という特殊なタスクが用意されており、処理タスクから「レンダリングイベント」を発行することでレンダリングタスクが起動されます。レンダリングタスクとしてはSmartyを使ってテンプレートを記述するCharcoal_SmartyRendererTaskがプリセットで用意されています。 CharcoalPHPではこのイベント/タスク機構を採用することで、タスク間、あるいはアプリケーション間の相互依存性を極力まで排除することができ、独立性の高いロジックを構築することができます。

プロシージャの構造(structure of procesure)

プロシージャの構造(structure of procesure)

ほぼ全てのオブジェクト、コンポーネントが置換可能

 CharcoalPHPではほぼ全てのオブジェクトやコンポーネントがPHPのインタフェースを使って実装されており、設定ファイルによって切り替え、もしくは追加が可能になっています。アプリケーション毎にログファイルを変えることはもちろん、場合によってはリクエストオブジェクトやイベントといったコアに近いクラスやオブジェクトも置換することができるため、極めて柔軟性の高いフレームワークとなっています。

バージョンごとにインストール可能なコンポーネント管理機構

 フレームワークのコンポーネントを更新した際、不具合が出ることがよくあります。Aというプロジェクトで運用中なのに、Bというプロジェクトでコンポーネントを更新する必要が出てきた場合、Aプロジェクトへの影響が出ないように、Bプロジェクトをフレームワークごと別のディレクトリに移動するなど対策が必要となります。CharcoalPHPではコンポーネントの複数のバージョンを混在できるため、プロジェクトごと、アプリケーションごと(あるいはタスクごと)にコンポーネントを切り替えることができます。 この機能を利用することで前述のようなコンポーネントのバージョン更新に伴う問題をスマートに解決することができます。

透過的なデータベースアクセスを提供するSmartGatewayコンポーネント

 CharcoalPHPでは様々なSQLベースのリレーショナルデータベース管理システム(RDBMS)に対応することが可能な「SmartGateway」というコンポーネントが同梱されています。プリセットでMySQL、PostgreSQL、sqlite用のデータソースが用意されていますが、その他のRDBMSに関しても所定のインタフェースを実装することで簡単に対応することができます。 SmartGatewayはJOINに対応していて、複数テーブルを連結してデータを取得できます。また、SmartGatewayはプリペアドステートメントにも対応していますので、SQLインジェクションに対して安全なシステムを構築することができます。 (ただし、プリペアドステートメントに対応するデータソース、つまりデータベースアクセスライブラリが必要です)

 さらに、SmartGatewayとMySQLのInnoDBなどトランザクションに対応したデータベースエンジンとを組み合わせることでトランザクションにも対応します。トランザクションの実装コードはタスクシステムの手続き型記述方式とPHPのtry-catch構文とを組み合わせることで複雑になりがちなトランザクション処理を非常にシンプルかつ明確に実装することができ、より堅牢なシステムを構築することが可能です。

Pocket

Comments are closed.