2010年7月20日火曜日

プロコン2010-1その2

一日で終わると思っていたら、3連休まるまる潰してしまいました。素直にLinqを使っておけば、インピーダンスミスマッチ解消に時間をかけなくても済んだのに、ちょっと選択を誤ったみたい。

インピーダンスミスマッチっていうのは、MSさんがLINQなりEntityFrameworkを売るためにひたすら呟いていたものです。要は、SELECT文は、抽出列や検索条件もろもろは即席で作れるのに、プログラムで開発したとたんに、それぞれ(入れ物や検索条件)で個別に定義が必要になり、しかもDataBaseアクセスクラスとBusinessLogicクラスでそれぞれおんなじようなものを作らなければならないので、開発時、この部分に時間をとられ、開発工数や注視が必要な範囲が大きくなってしまう、というのが論点(だとおもってます。)
これを、DBで扱う構造(Table構造)とプログラムで扱う構造(Select文で指定する構造)が異なることが問題ととらえて、電子工学になぞり、インピーダンスミスマッチが発生して伝達効率が悪くなるとたとえているものですが、基本的には昔から言われているインターフェース不一致の問題と同じです。


ま、今回は、完成した(んだけど、ドキュメントが少ない)場合に即席で設計資料を作るリバースエンジニアリングについてです。データベースとクラスについて。今回扱う2つの図は、修正すると、コードに反映されるもので、本来は設計・開発時に使うものなんだけど、完成した後でも一応使えるよってことで。

そんな即席で作った設計書など誰が見たがるか?という問題はさておき、資料を作ってみましょう。
一応、完成時のVisualStudioの画面はこんな感じ。


ここから、SQL Server2005Expressの機能を使って、DB構造についての図を作ってみます。
上の画面左のデータベースダイアグラムの部分で、マウス操作でアイテムを作り、それをダブルクリックして、開いた画面に対して、テーブル(BookOwner~VoiceForTitleまで)をドラッグ&ドロップします。
その後、配置をいろいろ配置した結果がこんな感じ。


これを、そのまま印刷するなり、右クリックしてクリップボードにコピーした後、Word,Excel,Paint等に貼り付けて編集したりして、DBの概要資料を作ります。


続いて、クラス図。

Diagramフォルダを作って、その中に、クラスダイアグラムを追加します。(ClassDiagram.cdとDataSetDiagram.cdの2ファイル。)
ファイルを追加した直後の画面はこんな感じ。


まずは、ClassDiagram.cdの方から。ClassDiagram.cdを開いた状態から、ソリューションエクスプローラの「Admin」フォルダ、「App_Code」フォルダ、「DAC」フォルダ、「User」フォルダ、「Admins.Master,Default.aspx,Login.aspx,Users.Master」ファイルをドラッグ&ドロップします。

それで、いろいろこねくり回した結果が以下。これは、クリップボードにコピーできるのは画像だけで、Word,Excel,Paint等に貼り付けてテキストを変えるなど図の編集みたいなことは出来なさそう。


続いて、DataSetDiagram.cdの方、こちらは、DataSetフォルダをドラッグ&ドロップ。

テーブルアダプタについては、メソッドが重要なので、フィールドとプロパティは隠してメソッドだけ表示ただ、メソッドは引数、戻り値など完全な表示にしておきます。
逆にデータセットの方は、内部クラスのデータテーブルのプロパティが重要なのでそれだけ表示させます。
で、こんな感じです。



上に書いたとおり、これらの図は、VisualStudio(やSQL Server Management Studio)で触ると、コードやDBに反映されることを知っておいた方がいいですね。(プログラムやデータベースを意図せずに壊さないように。)