zoukankan      html  css  js  c++  java
  • .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 }
    BasePage类

    (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 }
    aspx页面

    (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中
    给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>
    web.config
  • 相关阅读:
    zoj 3279 线段树 OR 树状数组
    fzu 1962 树状数组 OR 线段树
    hdu 5057 块状链表
    hdu3487 Play with Chain
    bzoj 1588营业额统计(HNOI 2002)
    poj2823 Sliding Window
    poj2828 Buy Tickets
    poj2395 Out of Hay
    poj3667 Hotel
    poj1703 Lost Cows
  • 原文地址:https://www.cnblogs.com/yinyuejie/p/3237612.html
Copyright © 2011-2022 走看看