.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
{
private int uid;//用户ID
private string name;//用户名称
private string pass;// 用户密码
public USERINFO()
{ uid = 0; name = ""; pass = "";}
public int UID
{ get{ return uid; }
set { uid = value; }
}
public string NAME
{ get { return name; }
set{ value.Trim();name = value; }
}
public string PASS
{ get{ return pass; }
set{ value.Trim();pass = value; }
}
}
例2:异常处理实体类
public class EdException : System.Exception
{
private int m_nCode;// 异常相关代码
private string m_sMessage;// 异常相关消息
public EdException(string message)
{ m_nCode = 0; m_sMessage = message; }
public int Code
{ get { return m_nCode; }
set{ m_nCode = value; }
}
public new string Message
{ get{ return m_sMessage; }
set{ m_sMessage = value; }
}
}
(2)操作类
操作类主要对实体类中定义对象进行新增,修改,查询和删除操作。其中新增和修改方法参数为实体类对象。
例:用户操作类
public class PerUser
{
private SqlConnection m_Conn;
public PerUser(SqlConnection Conn)
{ m_Conn = Conn; }
public SqlConnection GetSqlConnection()// 获取数据库连接
{
if(m_Conn == null)
{
m_Conn = new SqlConnection(ConnectionString);
return m_Conn;
}
else {return m_Conn;}
}
public int f_insUSER(USERINFO user) // 新增用户信息
{
int line = 0; // 返回新增种子号
SqlConnection conn = GetSqlConnection();
try
{
string strSql = "";
strSql="insert into user_info(userAccount,userPwd)
values(@userAccount,@userPwd);"
+" SELECT SCOPE_IDENTITY()";
SqlCommand cmd = new SqlCommand(strSql, conn);
cmd.Parameters.Add("@userAccount", SqlDbType.VarChar);//参数
cmd.Parameters["@userAccount"].Value = user.NAME;//给参数赋值
cmd.Parameters.Add("@userPwd", SqlDbType.VarChar);//参数
cmd.Parameters["@userPwd"].Value = user.PASS;//给参数赋值
conn.Open();//打开连接
line = int.Parse(cmd.ExecuteScalar().ToString());//返回生成的新种子号码
}catch (SqlException se)
{
EdException we = new EdException("新增个人用户操作失败," + se.Message);
throw we;
}
finally { conn.Close();//关闭连接}
return line;
}
}
3、Web项目
在Web应用程序中,定义页面基类BasePage,在此类中封装了对于数据库连接,以及Session验证操作,所有基本页面类均继承此基类,这样在需要验证才能访问的页面,只要继承这个页面就可以拿到数据库连接,以及调用相应方法进行Session验证。
(1)BasePage类
public class BasePage:Page
{
private static readonly string ses_name = "_Auth_Session";
private USERINFO m_ui;
private string m_connString;
private SqlConnection m_conn;
public BasePage()
{
this.m_connString = Configuration.ConfigurationManager.
ConnectionStrings["ConnectionString"].ConnectionString;
this.m_conn = new SqlConnection(this.m_connString);
}
public SqlConnection GetSqlConnection()
{ return new SqlConnection(this.m_connString); }
// 当前登录用户帐号信息对象
public USERINFO currUserInfo
{ get{ return this.m_ui; } }
protected override void OnInit(EventArgs e)
{//验证页面访问权限
try
{ this.m_ui = new USERINFO();
this.InitSessionUser();
}
catch (EdException we)
{ Response.Write(we.Message + "[" + we.Code.ToString() + "]");}
base.OnInit(e);
}
private void InitSessionUser()
{
object auth = this.Session[ses_name];
if (auth == null)
{ this.m_ui = new USERINFO();
this.Session[ses_name] = this.m_ui;
}
else { this.m_ui = (USERINFO)auth; }
}
protected bool sessioncheck()
{
bool flag = false;
try
{ if (this.currUserInfo.NAME.Length > 0 && this.currUserInfo.UID > 0)
{ flag = true; }
else
{ flag = false; }
} catch { flag = false; }
return flag;
}
}
(2)基本aspx页面
例:新增用户页面InserUser.aspx,对应代码页面为InserUser.aspx.cs
public partial class InserUser: BasePage //继承基类页面,进行验证处理
{
protected void Page_Load(object sender, EventArgs e)
{// 判断是否登录
if (!this.sessioncheck())
{ Response.Redirect("Default.aspx");}
}
protected void BtnIns_Click(object sender, EventArgs e)
{
try
{
PerUser m_peruser = new PerUser(this.GetSqlConnection());
USERINFO userinfo = new USERINFO ();
userinfo.USER = this.TxtName.Text; //用户名
userinfo.PASS = this.TxtPwd.Text; //密码
int line = m_peruser.f_insUSER(userinfo);
lblinfo.Text = "你是第"+line.ToString()+"位用户";
}
catch (EdException we)
{ lblinfo.Text = we.Message; }
}
}
(3)给Session赋值
在用户登录页面,进过数据库查询判断,如果用户是系统用户,则登录成功后,将用户信息对象封装到Session中。
//将用户信息放入Session中
USERINFO m_ui = new USERINFO();
m_ui.UID = id;
m_ui.NAME = this.TxtName.Text;
m_ui.PASS = this.TxtPwd.Text;
HttpContext.Current.Session["_Auth_Session"] = m_ui; //将用户信息放入Session中
4、配置文件
将数据库连接信息配置到Web.config,以方便修改。
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="ConnectionString" connectionString="Data
Source=.;Initial Catalog=DbAuc;User ID=test;Password=123456"/>
</connectionStrings>
</configuration>
.NET项目框架(转)的更多相关文章
- Angular企业级开发(5)-项目框架搭建
		
1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...
 - 2_MVC+EF+Autofac(dbfirst)轻型项目框架_用户权限验证
		
前言 接上面两篇 0_MVC+EF+Autofac(dbfirst)轻型项目框架_基本框架 与 1_MVC+EF+Autofac(dbfirst)轻型项目框架_core层(以登陆为例) .在第一篇中介 ...
 - 1_MVC+EF+Autofac(dbfirst)轻型项目框架_core层(以登陆为例)
		
前言 在上一篇0_MVC+EF+Autofac(dbfirst)轻型项目框架_基本框架中,我已经介绍了这个轻型框架的层次结构,在下面的这篇文章中,我将以教师登陆功能为例,具体来扩充下我的core层的代 ...
 - 0_MVC+EF+Autofac(dbfirst)轻型项目框架_基本框架
		
前言 原来一直使用他人的开源项目框架,异常的定位会很麻烦,甚至不知道这个异常来自我的代码还是这个框架本身.他人的框架有一定的制约性,也有可能是我对那些框架并没深入了解,因为这些开源框架在网上也很难找到 ...
 - ASP.NET MVC5 网站开发实践(一) - 项目框架
		
前几天算是开题了,关于怎么做自己想了很多,但毕竟没做过项目既不知道这些想法有无必要,也不知道能不能实现,不过邓爷爷说过"摸着石头过河"吧.这段时间看了一些博主的文章收获很大,特别是 ...
 - iOS通用的MVC模式项目框架MobileProject
		
最近项目比较不赶的情况下,决定把一些通用.常用的内容集成在一个项目框架中,意在新项目中可以快速搭建:其实经过几个项目后,总是有一些重复的创建工作,可以使用本项目的内容直接进行开发:采用的是MVC的分层 ...
 - ASP.NET MVC5 网站开发实践(一) - 项目框架(转)
		
前几天算是开题了,关于怎么做自己想了很多,但毕竟没做过项目既不知道这些想法有无必要,也不知道能不能实现,不过邓爷爷说过“摸着石头过河”吧.这段时间看了一些博主的文章收获很大,特别是@kencery,依 ...
 - BizTalk开发系列(二十四) BizTalk项目框架建议
		
Asp.NET有MVC框架,大部份的开发都是按照MVC进行的.BizTalk是面向消息的开发,不能完全采用分层的开发模式.而微软只提供了 BizTalk项目开发的基本策略,通过分析相关的Complex ...
 - 循序渐进开发WinForm项目(1) --数据库设计和项目框架的生成
		
随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...
 - 《Play for Java》学习笔记(一)项目框架
		
从今天开始认真复习<Play for JAVA>,该书以一个案例为主线,以前为应付项目马马虎虎看了一遍,好多地方都不明白!现在跟着这本书再走一遍,认真模拟,当做一个项目啦!! 一.Play ...
 
随机推荐
- 设置westorm自动代码提示
			
打开settings 然后在js文件下 打出co 按TAB键就出现了color了
 - css清除默认样式和设置公共样式
			
/*公共样式--开始*/ html, body, div, ul, li, h1, h2, h3, h4, h5, h6, p, dl, dt, dd, ol, form, input, textar ...
 - PowerDesigner使用教程|使用方法
			
PowerDesigner安装方法: http://dev.firnow.com/course/3_program/java/javajs/20090908/174375.html 安装完这2个软件 ...
 - Linux内核简介
			
内核是提供硬件抽象层.磁盘及文件系统控制.多任务等功能的系统软件.一个内核不是一套完整的操作系统.一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux.Linux内核的主 ...
 - c语言详解sizeof
			
一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等. 它并不是函数. sizeof操作符以字节形式给出了其操作数的存储大小. 操 ...
 - iOS的常见文件及程序的启动原理
			
一. iOS中常见文件 (一). Xcode6之前 创建项目,默认可以看见一个存放框架的文件夹 info文件以工程文件名开头,如:第一个项目-Info.plist 项目中默认有一个PCH文件 (二). ...
 - 新建txt文件新增内容并打印出
			
#!/usr/bin/python import os file1=open("C:\Python34\ceshi.txt","a+"); #a+开一个文件用 ...
 - spring配置带参数的视图解析器:ParameterMethodNameResolver
			
1.配置处理器 <!-- 处理器 --> <bean id="myController" class="cn.cnsdhzzl.controller.M ...
 - UI-popup
			
做CRM有些时间了,可是对于UI却接触的不是很多,不过感觉UI和DYNPRO差不多...很类似的,...呵呵.加油吧! LV_TITLE = TEXT-T07.”POPUP TITLE LV_PO ...
 - 如何在win7下配置IIS?