hibernateのO/Rマッピング設定は、XMLファイルに記述する方法と、マッピングの対象にするクラスにアノテ―ションを付加する方法があります。XMLファイルをクラスごとに作成するのはめんどうなので私は後者の設定方法を使っていますが、「依存関係」という観点でみるとXMLファイルに記述する方が好ましいことかもしれません。


hibernateはPoEAAのData Mapperパターン適応しているフレームワークです。Data Mapperパターンの依存関係は以下のようになります。

$My Java

今回は「ドメインクラス」がマッピングの対象になるクラス、マッパーがhibernateになります。
Data Mapperパターンを適用したメリットとして、マッピングするもの(マッパー)は両方に依存しても、マッピングされるもの(ドメインクラス、リレーショナルデータベース)は直接依存しないことがあります。そのため、ドメインクラスは本来の目的の「業務処理」だけを表現することが出来ます。


しかし、ドメインクラスにアノテ―ションを付加(つまりアノテ―ションをimport)した場合、依存関係は以下のように変化します。

$My Java

ドメインクラスがマッパーに依存してしまい、Data Mapperパターンのメリットを打ち消してしまっています。


この依存を取り除くためにXMLファイルでマッピングの設定を行うと以下のように修正されます。

$My Java

マッパーのみが依存を持っていてる状態に戻ります(XMLがドメインクラスからマッパーへの依存注入を行っている)。XMLで依存注入を行い、ソースコード上での依存はすべて取り除いた格好となりました。
プロジェクト始動から2週間が立ち、作品(システム)についての分析と設計が始まりました。
作品のコンセプトは「お絵かきSNS」です。Pixivのように事前にペイントツールで描かれた画像を投稿する形式ではなく、サイト内のキャンパスに描いて画像を投稿します。イメージではお絵かき機能が付いたTwitterみたいなものです。
現在私は、ユースケース図とユースケース記述を作成しています。ユースケース記述は文章の量が多いので思っていたより大変です。
所属している学校では後期授業が始まり、卒業制作プロジェクトが始動しました。
チームメンバーは5人で、ドキュメント作成担当、DB担当、クライアントサイド担当、サーバーサイド担当(私)、デザイン担当でプロジェクトを進めていく予定です。
まだイメージ段階ですが、就職活動時に考案したSNSサイトを作成する予定です。(これについては後日紹介します)
また、プロジェクトの進行に合わせてこのブログも更新していきたいと思っています。作品を制作していく中で色々な出来事も起きてくると思うので、「ブログ」を利用して発信できればと思います。

当たり前のことですが、Java言語プログラムの実行にはコンパイルが必要です。そのため、ソフトフェア内で使われるメッセージや設定情報をプログラムソースコードに記述していた場合、その情報を変更するときには再コンパイルの必要が起きます。
そこで、propertiesファイルを用いてこれらの情報をプログラムソースコードから取り除くことにより、再コンパイルの必要を阻止することが出来ます。

解説サイト:『@IT:コードから情報を追い出せ!プロパティファイルの常識

また、解説サイトにも紹介されていますが、この手法を発展させて、多言語対応サイトを開発することができます。エンドユーザーの環境から適切なpropertiesファイルを判断して読み込み、表示という形です。ほかにも、上手い使い方がありそうですね。
クラスのフィールドの値をを保護、または、クライアントの再利用性を高める目的で、private修飾子を用いたカプセル化と呼ばれる手法があります。private修飾子によって、同クラス外からはフィールドに直接アクセスできなくなり、アクセサーを通してのみアクセスできるためです。
しかし、returnだけのゲッターや、フィールドへの代入だけのセッターでは完全なカプセル化とは言えないようです。

『Code Zine:Javaの参照型変数とセキュリティ 』

デフェンシブコピーを用いた、不正なインスタンスの代入を防止、または、保護すべきインスタンスの不正入手を防止する解説です。
アクセサーがメソッドであることで、様々な処理を挟めるという特徴は理解していましたが、このような手法があることは初耳でした。勉強になります。