2010年9月12日日曜日

プロコン2010-1その6

asp.netの開発では、たとえ1人で作る個人的なプログラムであっても
プログラム開発効率を上げるためにある程度の決め事をしておきます。
(まあ設計というほどのものではないですが。)
たとえばこんな感じ。

A)画面デザインと共有パーツやロジックを複数のアセンブリ(DLLやexe)に分けず、1本のアセンブリで作成する。
 →Visual Studioのプロジェクトは1本。
B)プログラムソースコード群を以下のカテゴリに分ける。
・画面デザイン((UI)1画面内で判断できる画面固有のロジックも含む。フォルダを切らない。)
・ビジネスロジック(DACとBCは分けない。全てDACフォルダに格納する。ファイルアクセスがあればここで行う。)
・データベースアクセス(DBに対するSQL発行。全てDataSetフォルダで行う。)
上記のカテゴリは、隣接するカテゴリのみアクセスを許す。(画面デザインからストレージアクセスへの直呼び出しは不可)
上記のカテゴリのプログラムは、自分より上のカテゴリの構造を前提としてはいけない。(このビジネスロジックを呼び出すためには、呼び出し元がこうなっていなければならないとかはNG)
上記のカテゴリ間の複雑な構造のデータインタフェース(BEC)は、データセットやデータテーブルを用いる。
※データセットやテーブルっていうのは、.netのなかの、ado.netの機能で、データベースやテーブルをメモリ上で実装したものです。
ま、たんに決め事です。

で、データセット作成から、ソリューションエクスプローラで、"DataSet"というフォルダを作って、このフォルダを右クリック、追加でデータセットを作成する。
今回は、Library.xsdという名前で作成しています。
Library.xsdをダブルクリックし、編集画面で、右クリック→追加→DataTableを選択。DataTable1と表示されている部分を左クリックしRolesと変更。
その後、列の追加を行いRoleNameという列を追加。追加した列をクリックし、プロパティ(表示されていなければF4で表示させる。)で、文字列であることを確認する。
これでLibrary.DataSet.LibraryDataSetというクラスの内部クラスで、RolesDataTableクラスが作成される。
なお、Library.DataSet.LibraryDataSetの最初のLibraryは、現プロジェクト名で、次のDataSetは、プロジェクトに作ったフォルダの名前です。
で、RoleDataTableについては、TableAdapterを作っていません。
RoleDataTableへのデータ投入は、ビジネスロジックで行います。
~/DAC/RoleInfo.csの作りは、こんな感じ。これが前回の記事で指定したRoleInfoの内容です。


using System.Web.Security;
using Library.DataSet;

namespace Library.DAC
{
public static class RoleInfo
{
public static LibraryDataSet.RolesDataTable GetAllRole()
{
LibraryDataSet.RolesDataTable dt = new LibraryDataSet.RolesDataTable();
foreach (string s in Roles.GetAllRoles())
{
dt.AddRolesRow(s);
}
return dt;
}
}
}

0 件のコメント: