Cenaを3つのスライドで説明する

Cena-DTAの基本原理を簡単に説明します。元は3枚のスライドだったのですが、さらに一枚分を追加して説明します。なお、簡単に説明するため、実際のCenaとの記述とは異なる部分があります。

A HTML Form looks like...

最初は普通のHTMLフォームです。

<form action="/contact/mod/">

  <input type="text" name="id" value="10">

  <input type="text" name="name" value="Alan">

</form>

まぁ普通のフォームですよね。

Augumenting the HTML Form

次にCenaのような拡張を施します。

<form action="/cena">

  <input name="cena[contact][mod][10][set][name]" value="Alan">

</form>

必要そうな情報を全部nameに配列として入れてしまいました。

これで、次のようなフォームを作成できます。

<form action="/cena">

  <input name="cena[contact][mod][10][set][name]" value="Alan">

  <input name="cena[contact][new][12][set][name]" value="Taro">

  <input name="cena[connect][new][12][set][method]" value="@twitter">

</form>

ひとつのフォームの中で、

複数のデータの修正、追加が可能。たぶん削除もできるはず。

さらに異なるテーブルのデータの修正、追加が可能。

参照関係も記述可能

このままだと、Taro君の連絡方法との参照関係がわかりません。

それは、こうやります。

<form action="/cena">

  <input name="cena[contact][mod][10][set][name]" value="Alan">

  <input name="cena[contact][new][12][set][name]" value="Taro">

  <input name="cena[connect][new][12][set][method]" value="@twitter">

  <input name="cena[connect][new][12][rel][contact_id]" value="cena.contact.new.12">

</form>

参照については、さらに説明します。

RESTの考え方は

REST((Representational State Transfer)という重要な考え方があります。

詳しくないので英語版Wikipediaの「Guiding principles of the interface」を簡単にまとめて見ます。

次のような統一的なインターフェースを用いる。

Cenaで参照関係を記述する

この原理をCenaの参照関係の部分に当てはめてみます。

cena.connect.new.12.rel.contact_id = cena.contact.new.12

  Identify:   cena.connect.new.12

  Manipulate: rel.contact_id

  Meta Data:  cena.contact.new.12

Identify:登録する対象は、新たに追加するTaro君の「@twitter」の連絡先。
Manipulate:操作は、参照関係(rel)項目はcontact_idを設定する。
Meta Data:参照するデータをCenaを使って指定(Identify)する。

 

このケースで言えば、参照先のcena.contact.new.12が登録されて最終的なIDが確定した後、参照の値を読み込むことで正しく参照関係を維持してデータを登録します。

このように、Cena-DTAでは、すでにマスターDBに存在する・しないにかかわらず、すべてのデータ間の参照を記述することができ、これにより正しく参照データを同期します。