SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Visual Studio .NETのウィザードを使ってN階層アプリケーションを作成する:パート1

コードを複数の層に分離して効率的なアプリケーション開発を行う

プレゼンテーション層

 Visual Studioには、アプリケーションのユーザーインターフェイスの部分を、マスタ-詳細のリレーションシップを表示しながら作成できるData Formウィザードがあります。

 ソリューションエクスプローラで、これまでに使用してきたのと同じプロジェクトを右クリックし、[Add new item]をクリックします(ここでは、Data Formウィザードでビジネスオブジェクトを検出するために同じプロジェクトを使用します。コードは後で移動します)。一覧からData Formウィザードを選択して、フォームの名前に「OrdersWin」などを指定します。

図3 Data Formウィザード
図3 Data Formウィザード

 次の画面で、プロジェクトに含まれる既存のデータセットが検索されます。このデータセットを使うことも、この画面で新しく作成することもできます。ここでデータセットを作成してもまったく問題ありませんが、データ層とプレゼンテーション層を混ぜると、N層アプリケーションのセオリーに反することになるので、ここではそのためにデータオブジェクトとビジネスオブジェクトを別に作成しています。

図4 Data Formウィザード(画面2)
図4 Data Formウィザード(画面2)

 OrdersBOを選択すると(データオブジェクトではなくビジネスオブジェクトであることに注意)、ビジネスオブジェクト内に作成されている入力と更新のメソッドが一覧表示されるので、その中から、データセットの入力と更新に使うメソッドを選択します。

図5 Data Formウィザード(画面3)
図5 Data Formウィザード(画面3)

 DataSetに複数のテーブルがある場合、ウィザードは画面をもう1つ表示します。この画面では、マスタテーブルと詳細テーブルを選択します。また、フォームに追加するフィールドも選択できます。

図6 Data Formウィザード(画面4)
図6 Data Formウィザード(画面4)

 最後に、1つの親をフォームビューに表示するのか、複数の親をグリッドビューに表示するのかを選択します。子レコードは画面下部のリンクされたグリッドに表示されます。

 生成されるフォームは図7のようになります。このプロジェクトを実行すると、「Orders」と「Order Detail」の情報を操作するためのフォームになります。

図7 Data Formウィザードによって生成されたフォーム
図7 Data Formウィザードによって生成されたフォーム

 ウィザードの最後のオプションで、親を1つだけ表示する設定にした場合は、1対多のリレーションシップを表示するフォームになり、Ordersレコードの間を移動するためのコントロールと、必要に応じてレコードを編集するためのコントロールが追加されます(図7を参照)。

 アプリケーションをビルドして実行すると(プロジェクトのプロパティはOrdersWinフォームを起動するように設定しておきます)、最初にマスタ-詳細フォームが表示されます。リンクがどのように実行されたかを確認してください。詳細のグリッドのデータソースがobjOrdersBOに設定され、データメンバがデータセットのリレーションシップ名であるOrders.OrdersOrder_x0020_Detailsに設定されたことがわかります。

 以上のように、このアプリケーションはわずかなコードを記述するだけで簡単に作成できます。これなら経験の浅い開発者でもアプリケーションをすぐに構築できますし、3層アーキテクチャの個々の層を分離することができます。

生成されるコード

 ウィザードのコード生成機能により、各コントロールをデザインサーフェイスにドラッグしてプロパティを適切に指定したときと同じように、以下のコードが生成されます。

  • テーブル内の個々のフィールドを表すラベルおよびテキストボックスコントロール。それぞれのコントロールに、データ行のフィールドにバインドした適切な名前が割り当てられます。
  • データの読み込み、およびレコードの更新、追加、削除を行うためのボタン。
  • レコード間の移動を処理するためのボタン。
  • リレーションシップを持つ子レコードを表示するグリッド。子レコードへのリンクも設定されます。
  • グリッドの各列のテーブルスタイル。
  • 各ボタンのクリックイベントを処理するメソッド。
  • データを読み込むメソッド(ベースメソッドを呼び出します)。
  • データセットを更新するメソッド。データバインドを効率的に処理するマージメソッドを利用します。

 これらのコードのほとんどは、ビジュアルツールを使っても生成できますが、このウィザードを使用すれば20~30分を節約できるうえに、優れたコーディングパターンが組み込まれます。生成されたコードは、合計でおよそ190行になりました。

 一方で、このウィザードは非常に気難し屋です。このウィザードは、ビジネスオブジェクトクラスにすべてのプロパティを過不足なく作成しておかないと、そのクラスを検出してくれません(正しい組み合わせは、筆者もまだ確実にはわかりません)。また、入力と更新のメソッドには必ず正しいシグネチャを指定する必要があります。それができたとしても、グリッドが正しく生成されるとは限りません。

層の分離

 分離する層は、アプリケーションの開発を始める前に作成しておくのがベストです。Windowsプロジェクトのすべての要素が用意できたら、「NorthwindBiz」という名前で新しいクラスライブラリプロジェクトを作成し、OrdersDOオブジェクトとOrdersBOオブジェクトをこのプロジェクトにドラッグアンドドロップしてください。次に、「OrdersWin.vb」ファイルから「NorthwindWin」の記述を探して「NorthwindBiz」に書き換えます。また、NorthwindBizプロジェクトへの参照をNorthwindWinプロジェクトに追加することも必要です。この2つの簡単な変更で、新しいフォームを前と同じように実行できます。また、同じビジネスロジックを使用するWebインターフェイスを追加するためのプロジェクトを追加することもできます(残念ながら、Webアプリケーション用のData Formウィザードはまだないので、このバージョンを実現するにはもう少し手間がかかります)。

まとめ

 現在ではアプリケーション生成のための優れたフレームワークやコード生成ツールが数多く販売されていますが、そのほとんどは、時間とお金をかけなければうまく使いこなすことができません。私はVisual Studio付属の生産性向上ツールを好んで使用しますが、このツールが展開するお粗末なプログラミング手法には満足していません。本稿で説明した手順がこの問題の解決に役立つはずです。

 OrdersBOクラスにコードをさらに追加して、検証を実行したり、その他のビジネスロジックを実装したりすることもできます。

 本稿では、正しく設計された実用的なアプリケーションモジュールを、およそ20分間で作成しました。生成したコードは1000行を超えましたが、自分で作成したコードはわずか10行ほどでした。

関連情報

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

David Catherman(David Catherman)

CMI Solutions所属。データベースアプリケーションのデザイン/開発に20年以上の経験を持ち、ここ4、5年は特にMicrosoft .NETとSQL Serverに仕事が集中している。現在はCMI Solutionsのアプリケーション設計者および上級開発者であり、Visual Studioと...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/320 2006/04/11 19:11

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー