.Net项目框架
摘要:本文描述了在用VS.NET进行B/S开发时采用的框架结构,一般建立类库项目和Web项目,在Web基本aspx页面类中调用类库中方法,同时在aspx页面类中不需要写任何对数据库操作的SQL代码,便于分层开发和代码维护。
1、概述
使用微软Visual Studio .NET进行B/S或者C/S结构应用程序开发,为了使软件分层开发和易维护原则,将整个项目框架分为类库和应用程序两个项目。在应用程序中调用类库中相应类的方法,这样对于应用程序开发和类库开发可以同步进行,同时,类库中相应方法内容的修改不会影响应用程序调用。在应用程序和类库交互过程中,方法参数尽量采用对象进行传递。在B/S结构中,应用程序为Web程序。
在类库中分为两种类,一种为实体类,主要是和数据库对应的字段属性;另一种为操作类,主要包括对此实体对象的增加、修改、查询、删除操作。在实体类中也定义对于异常的处理,这样,在操作类中就可以在数据库操作底层捕获具体增删改查异常。
在Web应用程序中,使用一个具体类BasePage,让其继承Web窗体页System.Web.UI.Page,此类封装对session操作,这样每一个Web窗体页只要继承BasePage就可以进行页面验证,不需要每一个页面都进行Session操作。
2、类库项目
类库主要是编写各种类,以便供Web应用程序调用。类库包括实体类和操作类。
(1)实体类
每一个类定义数据库中对应字段,便于在操作类中调用时,可以将对象传递给操作类方法。同时对每一个成员变量使用get和set操作,以便获取对象属性值或者给对象属性赋值。
1 public class USERINFO 2 { 3 private int uid;//用户ID 4 private string name;//用户名称 5 private string pass;// 用户密码 6 public USERINFO() 7 { uid = 0; name = ""; pass = "";} 8 public int UID 9 { get{ return uid; } 10 set { uid = value; } 11 } 12 public string NAME 13 { get { return name; } 14 set{ value.Trim();name = value; } 15 } 16 public string PASS 17 { get{ return pass; } 18 set{ value.Trim();pass = value; } 19 } 20 }
1 public class EdException : System.Exception 2 { 3 private int m_nCode;// 异常相关代码 4 private string m_sMessage;// 异常相关消息 5 public EdException(string message) 6 { m_nCode = 0; m_sMessage = message; } 7 public int Code 8 { get { return m_nCode; } 9 set{ m_nCode = value; } 10 } 11 public new string Message 12 { get{ return m_sMessage; } 13 set{ m_sMessage = value; } 14 } 15 }
(2)操作类
操作类主要对实体类中定义对象进行新增,修改,查询和删除操作。其中新增和修改方法参数为实体类对象。
1 public class PerUser 2 { 3 private SqlConnection m_Conn; 4 public PerUser(SqlConnection Conn) 5 { m_Conn = Conn; } 6 public SqlConnection GetSqlConnection()// 获取数据库连接 7 { 8 if(m_Conn == null) 9 { 10 m_Conn = new SqlConnection(ConnectionString); 11 return m_Conn; 12 } 13 else {return m_Conn;} 14 } 15 public int f_insUSER(USERINFO user) // 新增用户信息 16 { 17 int line = 0; // 返回新增种子号 18 SqlConnection conn = GetSqlConnection(); 19 try 20 { 21 string strSql = ""; 22 strSql="insert into user_info(userAccount,userPwd) 23 values(@userAccount,@userPwd);" 24 +" SELECT SCOPE_IDENTITY()"; 25 SqlCommand cmd = new SqlCommand(strSql, conn); 26 cmd.Parameters.Add("@userAccount", SqlDbType.VarChar);//参数 27 cmd.Parameters["@userAccount"].Value = user.NAME;//给参数赋值 28 cmd.Parameters.Add("@userPwd", SqlDbType.VarChar);//参数 29 cmd.Parameters["@userPwd"].Value = user.PASS;//给参数赋值 30 conn.Open();//打开连接 31 line = int.Parse(cmd.ExecuteScalar().ToString());//返回生成的新种子号码 32 }catch (SqlException se) 33 { 34 EdException we = new EdException("新增个人用户操作失败," + se.Message); 35 throw we; 36 } 37 finally { conn.Close();//关闭连接} 38 return line; 39 } 40 }
3、Web项目
在Web应用程序中,定义页面基类BasePage,在此类中封装了对于数据库连接,以及Session验证操作,所有基本页面类均继承此基类,这样在需要验证才能访问的页面,只要继承这个页面就可以拿到数据库连接,以及调用相应方法进行Session验证。
1 public class BasePage:Page 2 { 3 private static readonly string ses_name = "_Auth_Session"; 4 private USERINFO m_ui; 5 private string m_connString; 6 private SqlConnection m_conn; 7 public BasePage() 8 { 9 this.m_connString = Configuration.ConfigurationManager. 10 ConnectionStrings["ConnectionString"].ConnectionString; 11 this.m_conn = new SqlConnection(this.m_connString); 12 } 13 public SqlConnection GetSqlConnection() 14 { return new SqlConnection(this.m_connString); } 15 // 当前登录用户帐号信息对象 16 public USERINFO currUserInfo 17 { get{ return this.m_ui; } } 18 protected override void OnInit(EventArgs e) 19 {//验证页面访问权限 20 try 21 { this.m_ui = new USERINFO(); 22 this.InitSessionUser(); 23 } 24 catch (EdException we) 25 { Response.Write(we.Message + "[" + we.Code.ToString() + "]");} 26 base.OnInit(e); 27 } 28 private void InitSessionUser() 29 { 30 object auth = this.Session[ses_name]; 31 if (auth == null) 32 { this.m_ui = new USERINFO(); 33 this.Session[ses_name] = this.m_ui; 34 } 35 else { this.m_ui = (USERINFO)auth; } 36 } 37 protected bool sessioncheck() 38 { 39 bool flag = false; 40 try 41 { if (this.currUserInfo.NAME.Length > 0 && this.currUserInfo.UID > 0) 42 { flag = true; } 43 else 44 { flag = false; } 45 } catch { flag = false; } 46 return flag; 47 } 48 }
(2)基本aspx页面
例:新增用户页面InserUser.aspx,对应代码页面为InserUser.aspx.cs
1 public partial class InserUser: BasePage //继承基类页面,进行验证处理 2 { 3 protected void Page_Load(object sender, EventArgs e) 4 {// 判断是否登录 5 if (!this.sessioncheck()) 6 { Response.Redirect("Default.aspx");} 7 } 8 protected void BtnIns_Click(object sender, EventArgs e) 9 { 10 try 11 { 12 PerUser m_peruser = new PerUser(this.GetSqlConnection()); 13 USERINFO userinfo = new USERINFO (); 14 userinfo.USER = this.TxtName.Text; //用户名 15 userinfo.PASS = this.TxtPwd.Text; //密码 16 int line = m_peruser.f_insUSER(userinfo); 17 lblinfo.Text = "你是第"+line.ToString()+"位用户"; 18 } 19 catch (EdException we) 20 { lblinfo.Text = we.Message; } 21 } 22 }
(3)给Session赋值
在用户登录页面,进过数据库查询判断,如果用户是系统用户,则登录成功后,将用户信息对象封装到Session中。
1 //将用户信息放入Session中 2 USERINFO m_ui = new USERINFO(); 3 m_ui.UID = id; 4 m_ui.NAME = this.TxtName.Text; 5 m_ui.PASS = this.TxtPwd.Text; 6 HttpContext.Current.Session["_Auth_Session"] = m_ui; //将用户信息放入Session中
4、配置文件
将数据库连接信息配置到Web.config,以方便修改。
1 <?xml version="1.0"?> 2 <configuration> 3 <connectionStrings> 4 <add name="ConnectionString" connectionString="Data 5 Source=.;Initial Catalog=DbAuc;User ID=test;Password=123456"/> 6 </connectionStrings> 7 </configuration>