2015年7月19日日曜日

[システム開発]メタデータ

 メタデータは「データのデータ」と呼ばれるもので、データの切り口のことを指す。たとえばインターネットで配信している音楽を例に挙げてみる。作詞者名、作曲者名、アーティスト名、曲の長さ、値段などが記載されている。どのサイトを見ても、少なくとも曲名は出ているはずである。この「曲名」や「値段」などのことをメタデータという。実際の曲名が「いとしのエリー」や「真夏の果実」となり、値段が「300円」とか「500円」となるが、これをサブスタンス(実体)という。メタデータは複数のサブスタンスに対応する。
 [メタデータ]曲名
   [サブスタンス]いとしのエリー
   [サブスタンス]真夏の果実
 [メタデータ]値段
   [サブスタンス]500円
   [サブスタンス]300円
 フレームワークが変わっても、物理マシンが仮想化されても、プログラムの言語が変わっても対応可能な共通的なソフトウェア構成は、このメタデータを使って作ることができる。昨今のシステム開発は、永続化するデータをデータベースに格納し、永続化データをどのように処理するかは業務ロジックで決めている。このソフトウェアの本体ともいえるものを「本質モデル」と呼ぶ。この本質モデルは、フレームワークやOS、開発言語、データベースの種類を問わず、常に同じものである。
 ここまでに取り上げたソフトウェア開発の問題は、データ+ロジックで構成される「本質モデル」をどう実装・メンテナンスしていくかという問題といえる。これを常に一定のものとするためには、メタデータの考え方を使う必要がある。
 例えばデータベースに関するソースコードを実装することを考えてみよう。論理テーブル名、物理テーブル名、論理カラム名、物理カラム名、型、長さ、主キー、外部キーなどの条件が分かっていれば、データベーステーブルを作成・削除・バックアップするSQLや、DAOクラスを自動生成できるはずである。たとえば次のようなテーブルがあったとする。
 [メタデータ]論理テーブル名
   [サブスタンス]ユーザ
 [メタデータ]物理テーブル名
   [サブスタンス]USER
 [メタデータ]論理カラム名
   [サブスタンス]ユーザID
   [サブスタンス]ユーザ名
 [メタデータ]物理カラム名
   [サブスタンス]USER_ID
   [サブスタンス]USER_NAME
 [メタデータ]型
   [サブスタンス]INT
   [サブスタンス]VARCHAR2(256)

 テーブルを作成するためのSQLをメタデータを使って記述すると、次のようになる。
CREATE TABLE [物理テーブル名]
(
    -- 以下の行は、物理カラム名の数だけ繰り返し
    [物理カラム名] [型]
)

 繰り返し処理をどう記述するか規則を決める必要はあるが、基本的にメタデータとサブスタンスをきちんと定義すれば、文字列変換だけでSQLを自動生成することができる。メタデータにJavaのDAOクラス上の型などを追加すれば、JavaのDAOクラスも文字列変換だけで自動生成することができる。更に言ってしまうと、全カラムselect、insert、deleteなどの基本的なコードも、JUnitテストコードを含め、完全に自動で生成することができる。
 別掲記事にて解説した通り、業務ロジックはサービスという単位でまとめ、ドメイン層の構造も一意に定まるものであるから、ソフトウェア開発でデータベース構造と提供するサービスが決まれば、人間がロジックを書かなければならない箇所以外は、全て自動でコードを生成することが可能である。(JUnitテスト付きのクラスを自動生成可能である)

0 件のコメント:

コメントを投稿