Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 42799|Yanıt: 2

[İletişim] C#'da üç katmanlı mimarinin kullanımı ve tanıtımına dair ayrıntılı açıklama, örneklerle birlikte

[Bağlantıyı kopyala]
Yayınlandı 22.10.2014 21:59:33 | | |
Üç katman: UI (arayüz), BLL (iş mantığı katmanı), DAL (veri erişim katmanı) Bu üçü mutlaka sahip olunması gerekenlerdir; bunlardan BLL ve DAL'daki sınıflar kamuya açık sınıflardır, çünkü kullanıcı arayüzü BLL'yi çağırmalıdır, BLL ise DAL ve UTILITY (veritabanına bağlanmak ve temel "ekleme, silme, değiştirme ve kontrol etme" işlemlerini gerçekleştirmek için temel yöntem) çağrısı yapmalıdır. Ayrıca, ENTITY (veri tablolarını eşler) ve Common gibi varlık katmanları da olabilir (bu kütüphane genellikle veri doğrulama yöntemleri, kontrol işlem yöntemleri gibi genel yöntemleri barındırır).
Basitçe söylemek gerekirse, öyle
Veritabanından verilere erişmek, veri erişim katmanıdır
İlgili verilerin iş ilişkilerini düzenlemek, iş mantığının bir katmanıdır
Toplu verilerin temsili bunun bir temsil katmanı olduğunu gösterir.

Bu arada, size bazı bilgiler bulmanızda yardımcı oldum:
       İyi bir hiyerarşik yapı, geliştiricilerin iş bölümünü daha net hale getirebilir. Katmanlar arasındaki arayüzler tanımlandıktan sonra, farklı mantık tasarımlarından sorumlu geliştiriciler çabalarını dağıtabilir ve el ele çalışabilirler. Örneğin, kullanıcı arayüzü personeli yalnızca kullanıcı arayüzünün deneyimi ve işleyişini dikkate almalıdır, alan tasarımcıları yalnızca iş mantığının tasarımına odaklanabilir ve veritabanı tasarımcıları karmaşık kullanıcı etkileşimleriyle uğraşmak zorunda kalmaz. Her geliştiricinin görevi onaylanır ve geliştirme ilerlemesi hızla iyileştirilebilir.

       Gevşek bağlantı faydaları açık. Bir sistem hiyerarşik değilse, mantığı sıkı iç içe geçmiş ve birbirine bağımlıdır ve kimse değiştirilebilir değildir. Bir değişiklik gerçekleştiğinde, tüm vücudu etkiler ve proje üzerindeki etkisi son derece ciddi olur. Katmanlar arasındaki bağımlılığı azaltmak sadece gelecekteki ölçeklenebilirliği garanti etmekle kalmaz, aynı zamanda yeniden kullanılabilirlikte bariz avantajlar da sağlar. Her fonksiyonel modül birleşik bir arayüz tanımladıktan sonra, aynı fonksiyonu tekrar tekrar geliştirmeden her modül tarafından çağrılabilir.

       İyi bir hiyerarşik yapı tasarımı yapmak için standartlar da gereklidir. Bu sistem ancak belirli bir standartlaştırma düzeyinde ölçeklenebilir ve değiştirilebilir olabilir. Katmanlar arasındaki iletişim ayrıca arayüzlerin standartlaştırılmasını zorunlu olarak da sağlar.

  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
Kopya kodu







Önceki:Winpcap ile birçok ağ kartı aracı kurulması gerekiyor, bunun ne için olduğunu biliyor musunuz?
Önümüzdeki:"Taç mantarı" ödülünü %100 çekmek için WeChat "Yantang Süt" Fabrikası'na dikkat edin
Yayınlandı 6.10.2021 09:51:23 |
İyi ki, sahibine teşekkürler!!
Yayınlandı 6.10.2021 11:09:10 |
C#'daki üç katmanlı mimariyi öğrenin
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com