.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操作,以便获取对象属性值或者给对象属性赋值。
public class USERINFO
{
private int uid;//用户ID
private string name;//用户名称
private string pass;// 用户密码
public USERINFO()
{ uid = ; 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; }
}
}
例一:用户信息实体类
public class EdException : System.Exception
{
private int m_nCode;// 异常相关代码
private string m_sMessage;// 异常相关消息
public EdException(string message)
{ m_nCode = ; 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 = ; // 返回新增种子号
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验证。
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 > && this.currUserInfo.UID > )
{ flag = true; }
else
{ flag = false; }
} catch { flag = false; }
return flag;
}
}
BasePage类
(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; }
}
}
aspx页面
(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中
给Session赋值
4、配置文件
将数据库连接信息配置到Web.config,以方便修改。
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="ConnectionString" connectionString="Data
Source=.;Initial Catalog=DbAuc;User ID=test;Password="/>
</connectionStrings>
</configuration>
web.config
.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 ...
随机推荐
- C# 打开指定文件或网址
System.Diagnostics.Process.Start的妙用: 文件夹打开时自动选中一个文件,比如自动选中此目录下的指定文件方法: Process.Start("Explorer& ...
- style中position的属性值具体解释
Position的英文原意是指位置.职位.状态.也有安置的意思.在CSS布局中,Position发挥着非常关键的数据,非常多容器的定位是用Position来完毕. Position属性有四个可选值,它 ...
- Web API-属性路由
路由(Routing)就是Web API如何将一个URI匹配到一个action的过程.Web API 2 支持一个新的路由方式-属性路由(attribute routing).顾名思义,属性路由使用标 ...
- 3D人脸识别预处理,3D face recognition preprocess
本文由兔崩溃公布http://blog.csdn.net/smartempire/article/details/31373817. 转载请注明出处.howdeshui#163.com 近期在做三维人 ...
- POJ 3390 Print Words in Lines(DP)
Print Words in Lines Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1624 Accepted: 864 D ...
- PHP jpgraph的一点小提示(附安装方法)
PHP中的GD库本身是一套很强大的绘图库了,绘制的图像基本可以满足日常要求,但强大规强大,还是不够方便哈,因为强大方便的基于PHP的GD库的jpgraph也就诞生啦! PHP默认是不启用GD库的,因为 ...
- c# 委托详解
1.委托声明 2.委托入门实例 namespace ConsoleApplication1 { public delegate void methodDelegate(string str); cla ...
- VMware7安装CentOS6.5教程
VMware7安装CentOS6.5教程 http://www.91linux.com/html/2014/CentOS_0415/9727.html工欲善其事,必先利其器.学习linux系统,必须先 ...
- leetcode第28题--Divide Two Integers
Divide two integers without using multiplication, division and mod operator. 分析:题目意思很容易理解,就是不用乘除法和模运 ...
- Android项目---listview的那些属性,常用却不常见
一.在xml中,常用到的属性有 android:cacheColorHint="#00000000" //设置拖动背景色为透明 android:dividerHeight=&quo ...