各部概要
コアは、アプリケーションに近いレベルから、インフラに近い部分まで、大きく分けて3層にわかれています。また最もインフラに近い第1層はいくつかのある程度独立したモジュールから構成されています。

第1層に登場するモジュール
CORE
当社で開発するアプリケーションの傾向にあわせてStruts1.1を拡張したものです。この部分はいわば「コアのコア」と呼べる部分で、混乱を避けるため、以後「CORE」と記述し、区別します。
COREが果たす役割は以下の通りです。
- strutsでサポートしていない機能(ログイン認証・ページ毎のセキュリティなど)を実現するための基本部分を提供
- 検索、トランザクションに使用する一連のクラスのインスタンス(ビジネスオブジェクト)を生成、提供する機構の提供
ORマッピングフレームワーク
このモジュールはJAVAコードからSQL文を排除し、エンティティレベルでビジネスロジックを構築するために用意したものです。このフレームワークとCOREは互いに独立しており、将来代わりに別のORマッピング製品やEJBを使用することが可能です。このモジュールの特徴は以下の通りです。
- XMLファイルにSQL文を定義する
これにより、JAVAコードからのSQL文の排除が実現できます。 - 式言語ライクなプレースホルダ
SQL文に埋め込む変数の部分に数字ではなく、名前を使用します。これはJavaBeansのプロパティやjava.util.Mapインターフェイスのキーと対応しており、その値がSQL文に埋め込まれて出力されます。 - SQL文出力プロセスのパフォーマンス向上
起動時に多くのことを済ませてしまうため、実際のSQL発行時に若干のパフォーマンス向上が期待できます。
ビジネスオブジェクト
必ずこの役割を果たすものが存在しなければならないということは明確なものの、なんらかのインターフェイスによる規定や制限があるわけではありません。ただし、以下に示すように推奨される構造については用意されており、概要で述べた通り、一種のデザインパターンと考えると良いかと思われます。また、先に述べたORマッピングフレームワークは、このパターンを前提として設計されています。
ビジネスオブジェクトは大きく2つに分けられます。操作を定義するものと、データ型を定義するものです。以後それぞれをHome、Entityと呼びます。EJBを用いた開発経験のある方は、ここで言うHomeをHomeインターフェイスとセッションビーン、Entityはエンティティビーンの役割を果たすものと考えていただければわかりやすいと思います。これらのインターフェイス定義は先ほどの図でいう第2層で、実装は同じく第3層で行います。
Homeの形式については、メソッド命名ガイドラインは存在しますが、それ以外に特に規定はありません。ただし、実装段階で状態を持つ必要がないと判断された場合にはシングルトンパターンを適用することが推奨されていることに注意してください。
EntityはRDBMSでいうテーブル1レコードまたはプラスアルファを表し、JavaBeansに準拠した形をとる必要があります。次にこの部分にフォーカスを当てた図を示します。

第2層に登場するモジュール
この層に存在する各モジュールは第1層と違い、互いに依存しあったり、協調動作を行ったりすることはありません。逆に言えば互いに独立していることが求められます。この層に登場するモジュールは、すべて先に述べたビジネスオブジェクトのインターフェイス定義を含みます。
機能モジュール
機能モジュールとは、掲示板、スケジューラなどといったシステムに含まれる各機能を、機能単位にまとめたものです。このなかには、UI、画面遷移、データ操作、モデル定義などが含まれます。
必須モジュール
これは機能モジュールの特殊なものと位置づけけられます。ログイン処理やページごとのセキュリティ管理など、当社で開発するアプリケーションに必須な機能を実現するもので、COREと密接な関係を持ちます。
サブフレームワーク
記事を扱うものの中には、掲示板やクレーム報告など、さまざまな種類がありますが、これらの中には共通部分は多いものの扱うデータの種類のみが違うという例が多く見られます。 機能モジュールは通常この層に存在しますが、このように複数の機能に共通点が見出せるものについては、第1層と機能モジュールの間に一階層はさみ、一定レベルの汎用性をもたせることで機能モジュールの開発にかかるコストを削減できます。 この層をサブフレームワーク(SFW)と呼びます。このモジュールはある程度決まった対象を扱うため、ビジネスオブジェクトの実装やRDBMSのテーブル定義が含まれることがあります。
(2.5層に登場するモジュール)機能モジュール(SFWに依存したもの)
この層にはSFWを使用して開発した機能モジュールが存在します。
第3層に登場するモジュール
この層がいわゆるアプリケーション層ということになります。この層を作成してはじめてシステムとして動作が可能になります。
機能モジュールのI/F部分の実装
RDBMSのテーブル定義を行い、HomeとEntityを実装します(ORマッピングフレームワークのSQL定義を含む)。
アプリケーション固有の部分の実装
組織構造など、顧客によっての違いが大きく、標準化するのが難しい部分は、この層ですべて作成します。

