この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 42799|答える: 2

[通信] C#における三層アーキテクチャの使用と導入に関する詳細な説明と例

[リンクをコピー]
掲載地 2014/10/22 21:59:33 | | |
3つの層:UI(インターフェース)、BLL(ビジネスロジック層)、DAL(データアクセス層)これら3つは必須で、BLLとDALのクラスは公開クラスです。なぜなら、UIはBLLを呼び出す必要があり、BLLはDAL、そしてUTILITY(データベースに接続し「追加、削除、変更、チェック」といった基本的な操作を実行する基盤メソッド)だからです。 さらに、ENTITY(データテーブルをマッピングする)やCommon(このライブラリは一般的にデータ検証メソッドや制御操作メソッドなどの一般的なメソッドを配置します)などのエンティティレイヤーも存在します。
簡単に言えば、それは
データベースからのデータにアクセスすることはデータアクセス層です
関連データのビジネス関係を整理することは、ビジネスロジックの一層です
集約されたデータの表現は、これが表現層であることを示しています。

ちなみに、いくつか情報を見つけるのを手伝いました:
       良い階層構造は、開発者の労働分担をより明確にします。 レイヤー間のインターフェースが定義されると、異なる論理設計を担当する開発者がそれぞれの努力を分散させ、手を取り合って作業できるようになります。 例えば、UI担当者はユーザーインターフェースの体験と運用だけを考慮すればよく、ドメインデザイナーはビジネスロジックの設計に専念でき、データベースデザイナーは煩雑なユーザー操作を気にする必要はありません。 各開発者のタスクが確認され、開発の進捗は迅速に改善されます。

       ルーズカップリングの利点は明らかです。 もしシステムが階層的でなければ、その論理は密接に絡み合い依存しており、誰も代わりがいけません。 一度変化が起こると、それは全身に影響を及ぼし、プロジェクトへの影響は非常に深刻です。 レイヤー間の依存を減らすことは、将来のスケーラビリティを保証するだけでなく、再利用性においても明らかな利点をもたらします。 各関数モジュールが統一インターフェースを定義すると、同じ関数を繰り返し開発することなく各モジュールから呼び出すことができます。

       良好な階層構造設計を行うためには、標準も不可欠です。 このシステムは一定の標準化レベルがあって初めて、スケーラブルで置き換え可能になります。 層間の通信はインターフェースの標準化も必然的に保証します。

  1. 代码

  2.         /// <summary>
  3.         /// 初始化登录名称、登录密码(Model类)
  4.         /// </summary>
  5.         private string adminUser = string.Empty; //设置用户名称为空值
  6.         private string adminPwd = string.Empty; //设置用户密码为空值
  7.         public string AdminUser
  8.         {
  9.             get
  10.             {
  11.                 return this.adminUser;
  12.             }
  13.             set
  14.             {
  15.                 this.adminUser = value;
  16.             }
  17.         }
  18.         public string AdminPwd
  19.         {
  20.             get
  21.             {
  22.                 return this.adminPwd;
  23.             }
  24.             set
  25.             {
  26.                 this.adminPwd = value;
  27.             }
  28.         }

  29. 代码

  30.         /// <summary>
  31.         /// 用户登录(BLL类)
  32.         /// </summary>
  33.         /// <param name="m"></param>
  34.         /// <returns></returns>
  35.         public static int sysLogin(Model m)
  36.         {
  37.             string str = "adminValid"; //存储过程名称
  38.             SqlParameter[] sqlParameter =
  39.                 {
  40.                     // 将UI层传递过来的用户名称和密码赋值给存储过程中的变量分别是adminUser和adminPwd(注意大小写)
  41.                     new SqlParameter("adminUser",m.AdminUser),
  42.                     new SqlParameter("adminPwd",m.AdminPwd)
  43.                 };
  44.             DAL d = new DAL();
  45.             return Int32.Parse(d.ExecuteScalar(str,sqlParameter));
  46.         }

  47. 代码

  48.         /// <summary>
  49.         /// 新建一个SQL登录链接
  50.         /// </summary>
  51.         /// <returns></returns>
  52.         private static SqlConnection con()
  53.         {
  54.             return new SqlConnection("Data Source=localhost;Initial Catalog=数据库名称;Integrated Security=SSPI;");
  55.         }
  56.         /// <summary>
  57.         /// 执行操作(DAL类)
  58.         /// </summary>
  59.         /// <param name="str"></param>
  60.         /// <param name="sql"></param>
  61.         /// <returns></returns>
  62.         public string ExecuteScalar(string str, SqlParameter[] sql)
  63.         {
  64.             SqlConnection con = DAL.con();
  65.             try
  66.             {
  67.                 con.Open();
  68.                 SqlCommand com = new SqlCommand(str, con);
  69.                 com.CommandType = CommandType.StoredProcedure;
  70.                 com.Parameters.AddRange(sql);
  71.                 return Convert.ToString(com.ExecuteScalar()); //返回受影响的行数(例如影响的行数为1,那么返回数值1到BLL层,然后BLL层将数值1返回到UI层)
  72.             }
  73.             catch (Exception Error)
  74.             {
  75.                 throw Error;
  76.             }
  77.             finally
  78.             {
  79.                 con.Close();
  80.             }
  81.         }

  82. 代码

  83.         //UI 层
  84.         Model m = new Model(); //实例化Model类
  85.         m.AdminUser = this.TextBox1.Text.ToString(); //将文本框1中的值传递给Model类中的AdminUser
  86.         m.AdminPwd = this.TextBox2.Text.ToString(); //将文本框2中的值传递给Model类中的AdminPwd
  87.         if (BLL.sysLogin(m) > 0)
  88.         {
  89.             this.Label1.Text = "登录成功!马上进入管理平台...";
  90.         }
  91.         else
  92.         {
  93.             this.Label1.Text = "用户或密码错误,请重新输入!";
  94.         }

  95. 代码

  96. --存储过程 (SQL2005)
  97. set ANSI_NULLS ON
  98. set QUOTED_IDENTIFIER ON
  99. go

  100. ALTER PROC [dbo].[adminValid]
  101. @adminUser varchar(20),@adminPwd varchar(120)
  102. AS
  103. SELECT COUNT(*) FROM admin WHERE adminUser = @adminUser AND adminPwd = @adminPwd
コードをコピーします







先の:多くのネットワークカードツールはwinpcapでインストールする必要がありますが、これは何のためかご存知ですか?
次に:WeChatの「燕塘乳業」に注目して、「冠菌」賞を100%当選してください
掲載地 2021/10/06 9:51:23 |
よかったです。オーナーの方、提供してくれてありがとうございます!!
掲載地 2021/10/06 11:09:10 |
C#の三層アーキテクチャについて学びましょう
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com