ASP.NETとSilverlightで作るドキュメント管理アプリ その1

最近仕事でもちょこちょこSilverlightを使い出してきて*1Silverlight開発の定石みたいなものがうっすらと見えてきた。

例えば、

  • Silverlightだけでアプリケーションを作ろうと考えない(HTMLにはHTMLの得意なところ苦手なところ、Silverlightには(ry )
  • Silverilghtはより良いAjaxとして考える(JavaScriptなら大変だったことが比較的楽にできるようになる)

他にも色々あるけど、一つ一つ説明していく事にはあまり意味がないので、実際にアプリケーションを開発して実例で解説していこうと思う。

その例として今回は単純な「ドキュメント管理アプリケーション」を開発する。ちなみに今回の連載はかなり長期になると思う(また、完結するかどうかも怪しい)。

システム仕様

仕様は大きく分けて、

  • ドキュメント管理機能
  • ディレクトリ管理機能
  • ログインユーザ管理機能

に分類される。

ドキュメント管理機能

ドキュメントとは実ファイルとそれに関連付くメタデータのことを指す。

  • ドキュメントは実ファイルを一つだけ持つことができる(実ファイルは必須)。
  • ドキュメントはディレクトリに関連付けて管理する。
  • ドキュメントは以下のメタデータを保持する。
    • id(一意の識別子)
    • ファイル名(実ファイルのファイル名)
    • ディレクトリのid
    • 属性1
    • 属性2
    • 属性3
    • 属性4
  • ドキュメントに対して以下の操作が行える。
    • 検索(ファイル名による検索)
    • 追加
    • 編集(実ファイルの再登録、メタデータの修正)
    • 削除
    • 実ファイルのダウンロード

ディレクトリ管理機能

ディレクトリとはドキュメントを関連付け分類するものである。

ログインユーザ管理機能

ログインユーザとは本システムを使用するために認証を行うユーザである。

  • ログインユーザは以下のメタデータを保持する。
    • ログインid(一意の識別子)
    • ログインパスワード
    • ログインユーザ名
  • ログインユーザに対して以下の操作が行える。

画面仕様

画面仕様

ログイン画面

まず最初にログイン画面が表示される。

「ユーザ名」と「パスワード」を入力して、「ログイン」ボタンをクリックしてログインする。

ドキュメント管理画面

ログインに成功するとドキュメント管理画面に遷移する。

左側にディレクトリの一覧がツリー形式で、右側にドキュメントの一覧がグリッド形式で表示される。ドキュメントはディレクトリを選択する事で表示される。

ユーザ管理画面

「ユーザ管理」のリンクをクリックするとユーザ管理画面に遷移する。

まだまだ細かい画面がいっぱいあるけど面倒になってきたので、そのへんは作りながら決めていくことにする。概要はこれで十分つかめるだろう。

開発

では、実際に開発していこう。まずは開発環境から。

開発環境

データベース設計

なにはなくともまずはデータから。データベースの設計から始める。データベースには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:といってもまだリリースに至ったものは無いけど