ASP.NETとSilverlightで作るドキュメント管理アプリ その1
最近仕事でもちょこちょこSilverlightを使い出してきて*1、Silverlight開発の定石みたいなものがうっすらと見えてきた。
例えば、
- Silverlightだけでアプリケーションを作ろうと考えない(HTMLにはHTMLの得意なところ苦手なところ、Silverlightには(ry )
- Silverilghtはより良いAjaxとして考える(JavaScriptなら大変だったことが比較的楽にできるようになる)
他にも色々あるけど、一つ一つ説明していく事にはあまり意味がないので、実際にアプリケーションを開発して実例で解説していこうと思う。
その例として今回は単純な「ドキュメント管理アプリケーション」を開発する。ちなみに今回の連載はかなり長期になると思う(また、完結するかどうかも怪しい)。
ドキュメント管理機能
ドキュメントとは実ファイルとそれに関連付くメタデータのことを指す。
- ドキュメントは実ファイルを一つだけ持つことができる(実ファイルは必須)。
- ドキュメントはディレクトリに関連付けて管理する。
- ドキュメントは以下のメタデータを保持する。
- id(一意の識別子)
- ファイル名(実ファイルのファイル名)
- ディレクトリのid
- 属性1
- 属性2
- 属性3
- 属性4
- ドキュメントに対して以下の操作が行える。
- 検索(ファイル名による検索)
- 追加
- 編集(実ファイルの再登録、メタデータの修正)
- 削除
- 実ファイルのダウンロード
ディレクトリ管理機能
ディレクトリとはドキュメントを関連付け分類するものである。
開発
では、実際に開発していこう。まずは開発環境から。
開発環境
- Windows XP SP2
- Microsoft Visual Studio 2008 Standard Edition 以上
- Silverlight tools for Visual Studio 2008
- Microsoft SQL Server 2005 Express
- Enterprise Architect(データベース設計に利用)
データベース設計
なにはなくともまずはデータから。データベースの設計から始める。データベースにはSQL Server 2005を使用する。
ER図
ドキュメントの情報を格納する「Document」テーブル、ディレクトリの情報を格納する「Directory」テーブル、ログインユーザの情報を格納する「LoginUser」テーブルの三つで構成される。
また、以下のリレーションシップを張っている。
- 「Document」テーブルの「directory_id」列と「Directory」テーブルの「id」列
- 「Directory」テーブルの「parent_id」と同テーブルの「id」列
非常にシンプルな設計だが、まぁこんなぐらいで十分だろう。
このER図から生成されるSQL文(sldoc.sql)
CREATE TABLE Directory ( id int identity(1,1) NOT NULL, name varchar(48) NOT NULL, parent_id int ) ; CREATE TABLE Document ( id int identity(1,1) NOT NULL, file_name varchar(50) NOT NULL, directory_id int NOT NULL, attribute1 varchar(50), attribute2 varchar(50), attribute3 varchar(50), attribute4 varchar(50) ) ; CREATE TABLE LoginUser ( user_id varchar(20) NOT NULL, password varchar(20) NOT NULL, user_name varchar(50) NOT NULL ) ; ALTER TABLE Directory ADD CONSTRAINT PK_Directory PRIMARY KEY CLUSTERED (id) ; ALTER TABLE Document ADD CONSTRAINT PK_Document PRIMARY KEY CLUSTERED (id) ; ALTER TABLE LoginUser ADD CONSTRAINT PK_LoginUser PRIMARY KEY CLUSTERED (user_id) ; ALTER TABLE Directory ADD CONSTRAINT FK_Directory_Directory FOREIGN KEY (parent_id) REFERENCES Directory (id) ; ALTER TABLE Document ADD CONSTRAINT FK_Document_Directory FOREIGN KEY (directory_id) REFERENCES Directory (id) ;
それではさっそくデータベースを作成する。データベース名は「sldoc」に決めた。
以下のコマンドを実行して、データベースの作成→スキーマの流し込みを行う。
PS > osql -U sa 1 > create database sldoc 2 > go 1 > exit PS > osql -U sa -d sldoc -i sldoc.sql
これでデータベースの作成を完了。テスト用のデータについては後で考える。
To be continued...
目次
ソース
*1:といってもまだリリースに至ったものは無いけど