浅谈三层结构
来源:互联网 发布:ipv6网络设计 编辑:程序博客网 时间:2024/05/21 06:39
最近在学习三层结构,将所学的知识总结如下。
一:什么是三层结构;
所谓的三层开发就是将整个业务应用划分为表示层-业务逻辑层―数据访问层-数据库等,有的还要细一些,明确地将客户端的表示层、业务逻辑访问、和数据访问及数据库访问划分出来,十分有利于系统的开发,维护、部署和扩展。
二:为什么要使用三层结构,即使用三层结构的好处;
为什么要使用三层结构,它有那些优势?.net平台为我们提供强大的技术支持,通过code behind的强大支持,可以将页面设计和代码设计进行有效的分离,看起来非常清晰,也没有什么不好的。但是这种情况对于简单的应用来说,结构简单,代码清晰,这种一层结构开发就完全够了,没有必要使用分层结构。但是对于复杂的系统而言,如果不使用分层结构,将带来很大的麻烦。比如:在开发过程中会用到大量的重复或是相似的代码,导致代码冗长。一个很小的业务更改就有可能导致整个系统的大修,不利于修改。更为重要的是没有很好的利用面向对象的编程思想,是利用面向对象幌子走得确是面向过程的老路,不利于并行开发。
三:三层简介及其结构关系图
三层及作用:
1:显示层(UI):向用户展现特定业务数据,采集用户的输入信息和操作;
2:业务逻辑层(BLL):从DAL中获取数据,以供UI层显示,从UI层获取用户指令和数据,执行业务逻辑,从UI层中获取用户指令和数据,通过DAL写入数据库;
3:数据访问层(DAL):从数据源加载数据(select),向数据源写入数据(insert/update),从数据源中删除数据(delete);
四:小的实例
用单层结构和三层结构分别实现简单的登录。
单层结构:
using System;using System.Data.SqlClient;using System.Windows.Forms;namespace Login{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btn_submit_Click(object sender, EventArgs e) { string userName = txt_name.Text.ToString().Trim(); string password = txt_pwd.Text.Trim(); SqlConnection conn = new SqlConnection(); conn.ConnectionString = " Server=.;DataBase =DB_text;user Id=sa; Password=123456; "; string selectstring = "select * from T_Login where UserName = '" + userName + "'"; SqlCommand cmd = new SqlCommand(selectstring, conn); conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) { if (dr[2].ToString().Trim() == password) { MessageBox.Show("登录成功!"); } else { MessageBox.Show("密码错误!"); } } else { MessageBox.Show("用户名错误!"); } dr.Close(); conn.Close(); } }}
三层结构:
UI层代码:
using System;using System.Windows.Forms;namespace LoginUI{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btn_submit_Click(object sender, EventArgs e) { string userName = txt_name.Text.ToString().Trim(); string password = txt_pwd.Text.ToString().Trim(); LoginBLL.UserManager umg = new LoginBLL.UserManager(); UserModel.UserInfo user = umg.userLogin(userName,password); if (user != null) //不知道这段代码写在这里是否合适??? { if(user.password == password) MessageBox.Show("登录成功!"); else MessageBox.Show("密码错误!"); } else MessageBox.Show("用户名错误!"); } }}
BLL层代码:
namespace LoginBLL{ public class UserManager { public UserModel.UserInfo userLogin(string userName, string password) { LoginDAL.UserDAO uDAO = new LoginDAL.UserDAO(); UserModel.UserInfo user = uDAO.checkUser(userName,password); return user;//这里是将user直接返回给UI层,是不是可以在这里做个判断? } }}
DAL层代码:
1:负责与数据库连接的连接字符串
namespace LoginDAL{ public class DBUtil { public static string connString = "Server=.;DataBase =DB_text;user Id=sa; Password=123456;"; }}
对数据库的操作:
using System.Data.SqlClient;namespace LoginDAL{ public class UserDAO { public UserModel.UserInfo checkUser(string userName, string password) { UserModel.UserInfo user = null; SqlConnection conn = new SqlConnection(); conn.ConnectionString = DBUtil.connString; string selectstring = "select * from T_Login where UserName = '"+userName+"'"; SqlCommand cmd = new SqlCommand(selectstring, conn); conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) { if(user==null) user=new UserModel.UserInfo(); user.name = dr.GetString(1); user.password = dr.GetString(2); } dr.Close(); conn.Close(); return user; } }}
负责联系三层的数据模型:
namespace UserModel{ public class UserInfo { public string name { get; set; } public string password { get; set; } }}
- 浅谈三层结构
- 浅谈“三层结构”原理与用意
- 浅谈“三层结构”原理与用意(转)
- 浅谈“三层结构”原理与用意
- 浅谈“三层结构”原理与用意
- 浅谈“三层结构”原理与用意
- 浅谈“三层结构”原理与用意
- 浅谈“三层结构”原理与用意
- 浅谈“三层结构”原理与用意
- 浅谈“三层结构”原理与用意
- 浅谈“三层结构”原理与用意
- 浅谈“三层结构”原理与用意
- 浅谈三层结构原理与用意
- 浅谈三层结构原理与用意
- 浅谈“三层结构”原理与用意
- 浅谈ASP.NET三层结构模式
- 浅谈ASP.NET中三层结构
- [转]浅谈“三层结构”原理与用意
- elastic search 中读取数据问题
- MonkeyTalk自动化之——IOS agent
- 传播易7月发力 微信大号营销成为前锋
- Evaluate Reverse Polish Notation
- 负载均衡
- 浅谈三层结构
- hdu 2578
- poj 2230——Watchcow
- 玩转互联网,读这几本书就够了!
- 句柄类中计数器的分离
- Could not execute auto check for display colors using command /usr/bin/xdpyinfo. Check if the DISPLA
- (*(volatile unsigned long *)心得体会
- OpenGL: OpenGL Matrix Library
- OpenGL: RoundBox绘制