スバラシのオブジェクトモデル
スバラシは多くの種類のエンティティを扱うことになる。
スバラシは、科目やイベント情報といった、大学生活に関係するさまざまな情報を連携させることで、新しい利便性を実現することを目指すWebアプリケーションである。
しかし、対応するエンティティを増やすごとにデータベースのテーブルやフィールドを増やすのは大変である。
スバラシを他大学の学生が利用できるようにOSSとして公開することを考えると、できるだけ汎用的な設計にしたい。
実際にはこれらの機能を実現できれば必要十分では?
利用者を認証できること。
複数の利用者をグループ化し、グループとして「アイテム」を投稿できること。
複数種類のアイテムに対応すること。
グループによって投稿できる「アイテム」の種類が異なること。
「アイテム」同士を関連させることが可能であること。
クラス図
Item同士の関連を実現する仕組み
AttributeやAttributeWithItemが担う。
AttributeWithItemのparent属性およびvalue属性がItemを参照するようにする。
複数種類のItemを実現する仕組み
実体としてのItemがテンプレートとしてのItemを参照するようにする。
「実体(テンプレートではないもの)としてのItem」
type属性がテンプレートを参照するようにしたもの。
「テンプレートとしてのItem」
type属性がid: 0のItemを参照するようにすることで、テンプレートであることを示したもの。
AttributeWithItemのparent属性およびvalue属性もテンプレートを指すようにし、Item同士の関連を規定できるようにする。