DataAccessコンフィグ
Cejuno Framework全体の「美しい構造の連鎖」を見せる上で、まさに“土台の中の土台” にあたる部分、データアクセスを紹介します。
Cejuno Frameworkでは、Entityで定義された情報をどこから取得し、どこへ保存するのか──
この「データアクセスの源泉」を DataAccessConfig.xml により定義します。
このXMLは、環境ごとに使用するデータストアと接続設定を記述する“データアクセスの入口”であり、Cejuno Frameworkの自動化されたWorkflow・Task処理の背後で、透明に動作する仕組みを支えています。
4-1. DataAccessコンフィグ
<?xml version="1.0" encoding="UTF-8"?>
<DataAccessConfig>
<Environment Type="Local">
<DataSource Name="DefaultDB" Type="MySQL" URL="cejuno.com" Encoding="UTF-8">
<Parameter Key="Host" Value="localhost" />
<Parameter Key="Port" Value="3306" />
<Parameter Key="User" Value="root" />
<Parameter Key="Password" Value="cejuno" />
<Parameter Key="Charset" Value="utf8" />
</DataSource>
<DataSource Name="FileDB" Type="XML" URL="system/resource/db/xml" Encoding="UTF-8">
</DataSource>
</Environment>
<Environment Type="Server">
<DataSource Name="DefaultDB" Type="MySQL" URL="cejuno.com" Encoding="UTF-8">
<Parameter Key="Host" Value="mysql.db.cejuno.com" />
<Parameter Key="Port" Value="3306" />
<Parameter Key="User" Value="emdo" />
<Parameter Key="Password" Value="cejuno" />
<Parameter Key="Charset" Value="utf8" />
</DataSource>
<DataSource Name="FileDB" Type="XML" URL="system/resource/db/xml" Encoding="UTF-8">
</DataSource>
</Environment>
</DataAccessConfig>
Environment単位でデータソースを切り替えられる構造
- Environment Type="Local"
- Environment Type="Server"
これにより、
- どの環境でも同じEntity定義
- 同じWorkflow
- 同じTask
Environment自体の選択もenv.iniの設定から自動的に切り替わる仕組みとなります。
DataSourceNameはEntityコンフィグと1対1で紐づく
Entityコンフィグ側の最上位エレメントのDataSourceName属性の値が、DataAccessコンフィグのDataSourceエレメントのName属性と一致することで、
- どのDBに接続するか
- どのAdapterを利用するか
つまり、Entityの保存先はXMLの1行で切り替わるということです。
Adapter体系の思想
Cejuno Frameworkのデータアクセス層は、以下のようなAdapterの階層で抽象化されています。
4-2. DataAdapterクラス体系
DataAdapter
├─ DatabaseAdapter
│ ├─ MySQLAdapter
│ ├─ PostgreSQLAdapter
│ └─ OracleAdapter
│ :
│ :
│
└─ DataFileAdapter
├─ CSVAdapter
├─ XMLAdapter
└─ PropertiesAdapter
:
:
上位のDataAdapterは“データにアクセスするための抽象的なインターフェース”であり、その下に各データベースやファイル形式ごとの具体的Adapterが存在します。
呼び出し側から見ると“1つのクラスしかない”
開発者・フレームワーク利用者はAdapterの種類を意識する必要はありません。
なぜなら、アクセス操作はすべてDataAccessManagerが一元管理しているためです。
どのAdapterが使われるか?Entity経由でDataAdapterFactoryが自動で決定します。
$adapter = DataAdapterFactory::parse($entity -> getDataSourceName());
つまり、Entityが
- MySQLを指せばMySQLAdapter
- XMLファイルを指せばXMLAdapter
- CSVならCSVAdapter
また、DataAccessManagerに対して使用するメソッドは基本的に以下の5つだけです。
getEntity();
getEntityList();
insertEntity();
updateEntity();
deleteEntity();
これらのメソッドは、背後で適切なAdapterを呼び出し、Entityを自動的に取得・保存・更新できるようになっています。
Taskとの連携:フレームワーク利用者は「何も意識しない」
実際には、Workflow内のTask──
例えば EntityGetter、EntityUpdater、EntityRegisterなどが適切なタイミングで呼び出され、
DataAccessManager → 適切なAdapter → Entity
という処理がすべて自動的に実行されます。
結果として、
- SQLを書く必要はない
- DB接続の処理も不要
- トランザクションもTask側が制御可能
- XML編集だけで保存・更新が可能
これがCejuno Frameworkの思想である
- 「実装のためのコード」ではなく
- 「構造のための定義」だけを書く世界
他フレームワークとの違い
Cejuno Frameworkのデータアクセスに関するAdapter体系とEntity体系が完全に対応している設計思想は、一般的なフレームワークでは“ほぼ再現できない設計思想”です。
通常のフレームワークは、
- DB変更=コード変更
- 接続先追加=Repository追加
- SQL or ORMの調整が山ほど発生
しかしCejuno Frameworkでは、XMLを1行変えるだけでデータアクセス層全体が切り替わる。
そして極めつけは、Taskが自動的にDataAccessManagerを呼び、利用者は“データアクセスという概念そのものを意識しなくてよくなる”という革命的な発想が大きな違いと言えます。