ASP.NET 3層アーキテクチャ基礎詳細操作図文チュートリアル(一)
52836 ワード
本文は主にAspについて述べる.NetB/S構造の下で基礎の3層のアーキテクチャのプロジェクト.
3層は主にインタフェースUI層,論理層,データ層を指す.
インタフェースUI層:ユーザーが見る、体験するための表示層.
論理レイヤ:プログラムが論理を実行するパッケージレイヤ.
≪データ・レイヤ|Data Layer|emdw≫:プログラム・データに関連する操作のパッケージ・レイヤ.各階ごとに細かく分けることもできますが、基礎教程なので初心者から入門しているので、複雑な説明はしません.
私のいるコミュニティの中国マイクロソフトに問題があります.NET技术交流社区cnntec.com AZ猫を探して各位の転载を歓迎して、この情报を保留して下さい、あなたの协力に感谢します.
準備ツール:
Microsoft Visual Studio 2008以下vs 08と略す
Microsoft SQLServer 2005以下はデータベースと略称する
インストールは詳しくは言いません.
まず、新しいプロジェクトを作成します.
以下の図
VS 2008を開いたら、作成項目をクリックし、C#のweb項目を選択し、ASPを選択する.NET webアプリケーション、名前をStudyCSharpと記入します.Webで保存するパスを選択し、ソリューション名StudyCSharpを記入し、ソリューションの作成オプションをチェックしてください.
プロジェクトが作成されたことを確認したら、右側のソリューションエクスプローラを以下の図に示します.
保存されているディレクトリには、次の図のようなフォルダとファイルが必要です.
プロジェクトを3階層化し、先ほどプロジェクトを作成したときにUI層、すなわちwebプロジェクトを作成しました.BLLレイヤやDALレイヤなどを作成します.
以下の図
ファイルで、「追加」を選択し、「新規プロジェクト」を選択し、次の図をポップアップします.
左側ではwindowsプロジェクトを選択し、右側ではクラスライブラリを選択します.名前にStudyCSharpと入力.BLLパスアドレスは変更しなくてもよい.
作成後のプロジェクトディレクトリは次の図です.
以上の操作により、StudyCSharpを作成します.DALとStudyCSharp.EntityおよびStudyCSharp.Utility
次の図のように作成します.
各項目の説明:
StudyCSharp.Webプロジェクト:ユーザーに閲覧および操作体験を表示するための表示レイヤ
StudyCSharp.BLLプロジェクト:ロジック層、プログラム実現ロジック
StudyCSharp.DALプロジェクト:データ層、プログラムデータ関連操作パッケージ
StudyCSharp.EntityプロジェクトEntityプロジェクト:エンティティークラス、データベース・テーブル構造のマッピング
StudyCSharp.UtilityプロジェクトUtilityプロジェクトUtilityプロジェクトUtilityアプリケーション層、パッケージ関連アプリケーション操作
プロジェクトディレクトリには次の図があります.
ここまで、3階建てのフレームワークはすでに構築されていますが、まだ正常に運用されていません.私たちはいくつかの配置と修正を行います.
まず、DALレイヤを変更し、デフォルトのClass 1を削除します.csファイル、SQLhelperを新規作成します.csクラスとConfiguration.csクラス.
SQLhelperクラスCNNTECは以前発表したが、現在は重複していない.
分からないのはSqlHelperを見ることができます
http://www.cnntec.com/showtopic-899.html
以下はConiguration.csクラスの内容
2つのクラスを追加した後、DALプロジェクトの参照フォルダを右クリックし、「参照の追加」を選択します.
図のように
システムを選択します.コンフィギュレーション、OK、追加後は以下の図になります.
完了したら、Webプロジェクトの下のWebを構成し続けます.configファイル、主にデータベースに接続します.
以下の図
appSettingsノードの下にあります.元のノードはです.上図のように設定します.
データベース接続文字列の書き方を知らない初心者が多いことがわかりました.この文字列をvs 08で自動的に生成する方法を簡単に教えます.
以下の図
Webプロジェクトの下のDefaultを開きます.aspxファイル、分割を選択し、左側のツールバーのSqlDataSourceコントロールをダブルクリックします.
ビューとコードに対応するビューとコードが生成され、コントロールの構成データソースをクリックします.
ポップアップウィンドウは次の図のようになります.
図のように新しいリンクを選択し、ポップアップウィンドウで図のように選択します.
次に、独自のデータベースに基づいて構成し、データベース、データベース認証、ユーザー名、パスワードの入力、パスワードの保存、データベースの選択を行います.
以下の図が表示されます.
上の図のダイアログボックスのようにポップアップすると、この文字列をコピーできます.この文字列はリンク文字列です.OK、次にエンティティクラスを構成します.エンティティークラスは、データベース・テーブルのマッピングです.つまり、データベースのテーブルに対応します.
私達はデータベースをStudyCSharpのために創立して、表を創立してUserInformationのために具体的に表を建てて後でコードを与えます.
Entityプロジェクトで右クリックし、「クラスの追加」を選択し、次の図のようなデータを書き込みます.データベース内のテーブルUserInformationに対応します.
図:
私たちはこのデータベースのエンティティマッピングをした後、どのように使いますか?このエンティティをデータベースのように操作するにはどうすればいいですか?
すぐにDALプロジェクトを構成します.DALアイテムを右クリックし、「新規クラス」を選択します.
次の図を示します.
ダイレクトアイテム右ボタンなので、選択する必要はありません.
名前を直接入力すればいいここでは操作するUserInformationなのでクラス名はUserinformationと名付けられましたDAL.cs,確定
次の図を示します.
次に、クラスに次の名前空間の参照を追加します.
クラスの前にpublicを付けると次の図になります
未完、下図の操作に従って、引き続き参照を追加します
ポップアップ・ダイアログ・ボックスで、プロジェクト・バーを選択し、先ほど作成したデータ・トレーニングのマッピング・クラスを選択します.
以下の図
必要なデータベース・スクリプトは次のとおりです.テーブルおよび関連ストレージ・プロシージャを作成します.これは私たちの主講の核心ではないので、省略して、スクリプトを割り当てます.
ストアド・プロシージャ関連コール、詳細Userinformation_DAL.csの説明.Userinformation_を添付しますDAL.csファイルの内容は以下の通りです.
次編では,三層アーキテクチャのDALおよびBLLとWEB間の関係と呼び出しを解析する.
3層は主にインタフェースUI層,論理層,データ層を指す.
インタフェースUI層:ユーザーが見る、体験するための表示層.
論理レイヤ:プログラムが論理を実行するパッケージレイヤ.
≪データ・レイヤ|Data Layer|emdw≫:プログラム・データに関連する操作のパッケージ・レイヤ.各階ごとに細かく分けることもできますが、基礎教程なので初心者から入門しているので、複雑な説明はしません.
私のいるコミュニティの中国マイクロソフトに問題があります.NET技术交流社区cnntec.com AZ猫を探して各位の転载を歓迎して、この情报を保留して下さい、あなたの协力に感谢します.
準備ツール:
Microsoft Visual Studio 2008以下vs 08と略す
Microsoft SQLServer 2005以下はデータベースと略称する
インストールは詳しくは言いません.
まず、新しいプロジェクトを作成します.
以下の図
VS 2008を開いたら、作成項目をクリックし、C#のweb項目を選択し、ASPを選択する.NET webアプリケーション、名前をStudyCSharpと記入します.Webで保存するパスを選択し、ソリューション名StudyCSharpを記入し、ソリューションの作成オプションをチェックしてください.
プロジェクトが作成されたことを確認したら、右側のソリューションエクスプローラを以下の図に示します.
保存されているディレクトリには、次の図のようなフォルダとファイルが必要です.
プロジェクトを3階層化し、先ほどプロジェクトを作成したときにUI層、すなわちwebプロジェクトを作成しました.BLLレイヤやDALレイヤなどを作成します.
以下の図
ファイルで、「追加」を選択し、「新規プロジェクト」を選択し、次の図をポップアップします.
左側ではwindowsプロジェクトを選択し、右側ではクラスライブラリを選択します.名前にStudyCSharpと入力.BLLパスアドレスは変更しなくてもよい.
作成後のプロジェクトディレクトリは次の図です.
以上の操作により、StudyCSharpを作成します.DALとStudyCSharp.EntityおよびStudyCSharp.Utility
次の図のように作成します.
各項目の説明:
StudyCSharp.Webプロジェクト:ユーザーに閲覧および操作体験を表示するための表示レイヤ
StudyCSharp.BLLプロジェクト:ロジック層、プログラム実現ロジック
StudyCSharp.DALプロジェクト:データ層、プログラムデータ関連操作パッケージ
StudyCSharp.EntityプロジェクトEntityプロジェクト:エンティティークラス、データベース・テーブル構造のマッピング
StudyCSharp.UtilityプロジェクトUtilityプロジェクトUtilityプロジェクトUtilityアプリケーション層、パッケージ関連アプリケーション操作
プロジェクトディレクトリには次の図があります.
ここまで、3階建てのフレームワークはすでに構築されていますが、まだ正常に運用されていません.私たちはいくつかの配置と修正を行います.
まず、DALレイヤを変更し、デフォルトのClass 1を削除します.csファイル、SQLhelperを新規作成します.csクラスとConfiguration.csクラス.
SQLhelperクラスCNNTECは以前発表したが、現在は重複していない.
分からないのはSqlHelperを見ることができます
http://www.cnntec.com/showtopic-899.html
以下はConiguration.csクラスの内容
1.using System;
2.using System.Collections.Generic;
3.using System.Text;
4.using System.Data;
5.namespace StudyCSharp.DAL
6.{
7.public partial class Configuration
8.{
9.public static string DateFormat
10.{
11.get
12.{
13.string formatStr = System.Configuration.ConfigurationManager.AppSettings["DateFormat"];
14.if (formatStr == null)
15.{
16.return "yyyy/MM/dd HH:mm";
17.}
18.return "yyyy/MM/dd HH:mm";
19.}
20.}
21.private static string mConnectionString = string.Empty;
22.public static string ConnectionString
23.{
24.get
25.{
26.if (mConnectionString == string.Empty)
27.{
28.mConnectionString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];
29.}
30.return mConnectionString;
31.}
32.set
33.{
34.mConnectionString = value;
35.}
36.}
37.static EnumNetDbType mDbType = EnumNetDbType.Sql;
38.public static EnumNetDbType DbType
39.{
40.get
41.{
42.return mDbType;
43.}
44.set
45.{
46.mDbType = value;
47.}
48.}
49.//public static int GetOracleSequenceNextValue(string sequenceName)
50.//{
51.//string sequel = "select" + sequenceName + ".nextval from dual";
52.//return (int)(OracleHelper.ExecuteScalar(ConnectionString, CommandType.Text, sequel));
53.//}
54.}
55.public enum EnumNetDbType
56.{
57.Sql = 0,
58.Oracle = 1,
59.OleDb = 2
60.}
61.public enum EnumPersistStatus
62.{
63.New = 0,
64.Update = 1,
65.Delete = 2
66.}
67.}
2つのクラスを追加した後、DALプロジェクトの参照フォルダを右クリックし、「参照の追加」を選択します.
図のように
システムを選択します.コンフィギュレーション、OK、追加後は以下の図になります.
完了したら、Webプロジェクトの下のWebを構成し続けます.configファイル、主にデータベースに接続します.
以下の図
appSettingsノードの下にあります.元のノードは
データベース接続文字列の書き方を知らない初心者が多いことがわかりました.この文字列をvs 08で自動的に生成する方法を簡単に教えます.
以下の図
Webプロジェクトの下のDefaultを開きます.aspxファイル、分割を選択し、左側のツールバーのSqlDataSourceコントロールをダブルクリックします.
ビューとコードに対応するビューとコードが生成され、コントロールの構成データソースをクリックします.
ポップアップウィンドウは次の図のようになります.
図のように新しいリンクを選択し、ポップアップウィンドウで図のように選択します.
次に、独自のデータベースに基づいて構成し、データベース、データベース認証、ユーザー名、パスワードの入力、パスワードの保存、データベースの選択を行います.
以下の図が表示されます.
上の図のダイアログボックスのようにポップアップすると、この文字列をコピーできます.この文字列はリンク文字列です.OK、次にエンティティクラスを構成します.エンティティークラスは、データベース・テーブルのマッピングです.つまり、データベースのテーブルに対応します.
私達はデータベースをStudyCSharpのために創立して、表を創立してUserInformationのために具体的に表を建てて後でコードを与えます.
Entityプロジェクトで右クリックし、「クラスの追加」を選択し、次の図のようなデータを書き込みます.データベース内のテーブルUserInformationに対応します.
図:
私たちはこのデータベースのエンティティマッピングをした後、どのように使いますか?このエンティティをデータベースのように操作するにはどうすればいいですか?
すぐにDALプロジェクトを構成します.DALアイテムを右クリックし、「新規クラス」を選択します.
次の図を示します.
ダイレクトアイテム右ボタンなので、選択する必要はありません.
名前を直接入力すればいいここでは操作するUserInformationなのでクラス名はUserinformationと名付けられましたDAL.cs,確定
次の図を示します.
次に、クラスに次の名前空間の参照を追加します.
1.Using System.Data;
2.Using System.Data.SqlClient;
クラスの前にpublicを付けると次の図になります
未完、下図の操作に従って、引き続き参照を追加します
ポップアップ・ダイアログ・ボックスで、プロジェクト・バーを選択し、先ほど作成したデータ・トレーニングのマッピング・クラスを選択します.
以下の図
必要なデータベース・スクリプトは次のとおりです.テーブルおよび関連ストレージ・プロシージャを作成します.これは私たちの主講の核心ではないので、省略して、スクリプトを割り当てます.
1.USE [StudyCSharp]
2.GO
3.SET ANSI_NULLS ON
4.GO
5.SET QUOTED_IDENTIFIER ON
6.GO
7.CREATE TABLE [dbo].[SC_Userinformation](
8.[ID] [int] IDENTITY(1,1) NOT NULL,
9.[UserName] [nvarchar](32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
10.[UserPassword] [nvarchar](128) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
11.CONSTRAINT [PK_SC_Userinformation] PRIMARY KEY CLUSTERED
12.(
13.[ID] ASC
14.)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
15.) ON [PRIMARY]
16.USE [StudyCSharp]
17.GO
18.SET ANSI_NULLS ON
19.GO
20.SET QUOTED_IDENTIFIER ON
21.GO
22.CREATE PROCEDURE [dbo].[SP_SelectAllFromUserinformatoin]
23.AS
24.BEGIN
25.Select * from SC_userinformation
26.END
27.USE [StudyCSharp]
28.GO
29.SET ANSI_NULLS ON
30.GO
31.SET QUOTED_IDENTIFIER ON
32.GO
33.CREATE PROCEDURE [dbo].[SP_SelectAllFromUserinformatoinById]
34.@UID int
35.AS
36.BEGIN
37.Select * from SC_userinformation where id=@UID
38.END
39.USE [StudyCSharp]
40.GO
41.SET ANSI_NULLS ON
42.GO
43.SET QUOTED_IDENTIFIER ON
44.GO
45.CREATE PROCEDURE [dbo].[SP_InsertUserinformatoin]
46.@ID int=null,
47.@UserName nvarchar(32),
48.@UserPassword nvarchar(128)
49.AS
50.BEGIN
51.Insert into SC_Userinformation
52.(
53.UserName,
54.UserPassword
55.)
56.values
57.(
58.@UserName,
59.@UserPassword
60.)
61.select @@identity as 'identity'
62.END
63.USE [StudyCSharp]
64.GO
65.SET ANSI_NULLS ON
66.GO
67.SET QUOTED_IDENTIFIER ON
68.GO
69.CREATE PROCEDURE [dbo].[SP_UpdateUserinformatoin]
70.@ID int,
71.@UserName nvarchar(32),
72.@UserPassword nvarchar(128)
73.AS
74.BEGIN
75.Update SC_Userinformation
76.SET UserName=@UserName,
77.UserPassword=@UserPassword
78.where ID=@ID
79.END
80.USE [StudyCSharp]
81.GO
82.SET ANSI_NULLS ON
83.GO
84.SET QUOTED_IDENTIFIER ON
85.GO
86.CREATE PROCEDURE [dbo].[SP_UserLogin]
87.@UserName nvarchar(32),
88.@UserPassword nvarchar(128)
89.AS
90.BEGIN
91.select count(id)
92.from SC_UserInformation
93.where username=@UserName
94.and userPassword=@UserPassword
95.END
ストアド・プロシージャ関連コール、詳細Userinformation_DAL.csの説明.Userinformation_を添付しますDAL.csファイルの内容は以下の通りです.
1.using System;
2.using System.Collections.Generic;
3.using System.Text;
4.using System.Data;
5.using System.Data.SqlClient;
6.namespace StudyCSharp.DAL
7.{
8.public partial class Userinformation_DAL
9.{
10./// <summary>
11.///
12./// </summary>
13./// <param name="userName"> </param>
14./// <param name="userPassword"> </param>
15./// <returns> True </returns>
16.public static bool UserLogin(string userName, string userPassword)
17.{
18.string sequel = "SP_UserLogin";
19.SqlParameter[] paras = new SqlParameter[]
20.{
21.new SqlParameter("@UserLoginName", userName),
22.new SqlParameter("@UserPassword",userPassword)
23.};
24.int result =(int)SqlHelper.ExecuteScalar(Configuration.ConnectionString, CommandType.StoredProcedure, sequel, paras);
25.if (result > 0)
26.{
27.return true;
28.}
29.else
30.{
31.return false;
32.}
33.}
34./// <summary>
35.///
36./// </summary>
37./// <param name="ui"> </param>
38./// <returns> </returns>
39.public static int CreateUserInfo(StudyCSharp.Entity.UserInformation ui)
40.{
41.string sequel = "SP_InsertUserinformatoin";
42.SqlParameter[] paras = (SqlParameter[])ValueParas(ui);
43.int result = SqlHelper.ExecuteNonQuery(Configuration.ConnectionString, CommandType.StoredProcedure, sequel, paras);
44.return result;
45.}
46./// <summary>
47.///
48./// </summary>
49./// <returns> </returns>
50.public static List<StudyCSharp.Entity.UserInformation> GetAllUserInfo()
51.{
52.string sequel = "SP_SelectAllFromUserinformatoin";
53.DataTable dt = SqlHelper.ExecuteDataSet(Configuration.ConnectionString, CommandType.StoredProcedure, sequel,null).Tables[0];
54.return LoadListFromDataView(dt.DefaultView);
55.}
56./// <summary>
57./// , , SQL
58./// </summary>
59./// <returns>DataTable</returns>
60.public static DataTable GetAllUserInfoBySql()
61.{
62.string sequel = "Select * from SC_UserInformation";
63.DataTable dt = SqlHelper.ExecuteDataSet(Configuration.ConnectionString, CommandType.Text, sequel, null).Tables[0];
64.return dt;
65.}
66./// <summary>
67.///
68./// </summary>
69./// <param name="empId"> id</param>
70./// <returns> </returns>
71.public static StudyCSharp.Entity.UserInformation GetUserInfoByEmpId(string empId)
72.{
73.string sequel = "SP_SelectAllFromUserinformatoinById";
74.SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@UID", empId) };
75.DataTable dt = SqlHelper.ExecuteDataSet(Configuration.ConnectionString, CommandType.StoredProcedure, sequel, paras).Tables[0];
76.if (dt.Rows.Count == 0)
77.{
78.return null;
79.}
80.else
81.{
82.DataRow row = dt.Rows[0];
83.return GetEntity(row);
84.}
85.}
86./// <summary>
87.///
88./// </summary>
89./// <param name="ui"> </param>
90./// <returns> </returns>
91.public static int UpdateUserInfo(StudyCSharp.Entity.UserInformation ui)
92.{
93.string sequel = "SP_UpdateUserinformatoin";
94.SqlParameter[] paras = (SqlParameter[])ValueParas(ui);
95.int result = SqlHelper.ExecuteNonQuery(Configuration.ConnectionString, CommandType.StoredProcedure, sequel, paras);
96.return result;
97.}
98./// <summary>
99./// DataView
100./// </summary>
101./// <param name="dv">DataView</param>
102./// <returns> </returns>
103.private static List<StudyCSharp.Entity.UserInformation> LoadListFromDataView(DataView dv)
104.{
105.List<StudyCSharp.Entity.UserInformation> list = new List<StudyCSharp.Entity.UserInformation>();
106.for (int index = 0; index <= dv.Count - 1; index++)
107.{
108.list.Add(GetEntity(dv[index].Row));
109.}
110.return list;
111.}
112./// <summary>
113./// DataReader
114./// </summary>
115./// <remarks></remarks>
116.private static StudyCSharp.Entity.UserInformation GetEntity(IDataReader dataReader)
117.{
118.StudyCSharp.Entity.UserInformation _obj = new StudyCSharp.Entity.UserInformation();
119.if (!dataReader["ID"].Equals(DBNull.Value))
120._obj.ID = Convert.ToInt32(dataReader["ID"]);
121.if (!dataReader["UserName"].Equals(DBNull.Value))
122._obj.UserName = Convert.ToString(dataReader["UserName"]);
123.if (!dataReader["UserPassword"].Equals(DBNull.Value))
124._obj.UserPassword = Convert.ToString(dataReader["UserPassword"]);
125.return _obj;
126.}
127./// <summary>
128.///
129./// </summary>
130./// <remarks></remarks>
131.private static StudyCSharp.Entity.UserInformation GetEntity(DataRow row)
132.{
133.StudyCSharp.Entity.UserInformation _obj = new StudyCSharp.Entity.UserInformation();
134.if (!row["ID"].Equals(DBNull.Value))
135._obj.ID = Convert.ToInt32(row["ID"]);
136.if (!row["UserName"].Equals(DBNull.Value))
137._obj.UserName = Convert.ToString(row["UserName"]);
138.if (!row["UserPassword"].Equals(DBNull.Value))
139._obj.UserPassword = Convert.ToString(row["UserPassword"]);
140.return _obj;
141.}
142./// <summary>
143./// Insert
144./// </summary>
145./// <remarks></remarks>
146.private static IDbDataParameter[] ValueParas(StudyCSharp.Entity.UserInformation _obj)
147.{
148.SqlParameter[] paras = new SqlParameter[3];
149.paras[0] = new SqlParameter("@ID", _obj.ID);
150.paras[1] = new SqlParameter("@UserName", _obj.UserName);
151.paras[2] = new SqlParameter("@UserPassword", _obj.UserPassword);
152.paras[0].DbType = DbType.Int32;
153.paras[1].DbType = DbType.String;
154.paras[2].DbType = DbType.String;
155.return paras;
156.}
157.}
158.}
次編では,三層アーキテクチャのDALおよびBLLとWEB間の関係と呼び出しを解析する.