.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 ...
随机推荐
- spring来了-01-概述
思考 对象创建能否写死? 对象创建细节 对象数量 action 多个 [需要维护成员变量] service 一个 [不需要维护成员变量] dao ...
- 面试时,问哪些问题能试出一个 Android 应用开发者真正的水平?【转自知乎】
这几年面过的各种Android开发也有三位数了,failed的不敢说,pass的基本都没有看走眼,来得晚了也想说说我的体会. 一般面试时间短则30分钟,多则1个小时,这么点时间要全面考察一个人难度很大 ...
- python3 安装scrapy Exception: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/pip/req/req_install.py", line 1006, in check_if_exists解决方法
错误代码: Exception: Traceback (most recent call last): File , in check_if_exists self.satisfied_by = pk ...
- Qt之QSS(黑色炫酷)
简述 Qt助手中有关于各种部件的QSS详细讲解,资源很丰富,请参考:Qt Style Sheets Examples. 黑色炫酷 - 一款漂亮的QSS风格. 之前博客中分享了很多关于Qt的样式效果,几 ...
- 笔记6:winfrom连接sql server 进行数据交换
今天的作业是用winfrom窗体做一个留言板,如图: 要求和数据库有查询和添加功能.下拉框里的值是直接获取数据库中的值 一.连接数据库,获取表中数据 //创建一个存数据的表 DataTable tab ...
- EasyUI tab常用
获取选中的tab的title var tab = $('#tab_Employee').tabs('getSelected'); var t=tab.panel('options').title; t ...
- target不起作用了
原因是 <a href="",target></a>中间多了个逗号.
- Play framework 2.0 -应用程序全局设置(转)
转载自: http://shenbai.iteye.com/blog/1517366 1.全局对象 在工程中定义全局对象可以允许你操作你的应用程序的全局设置.这个全局对象必须定义在根包下. impor ...
- 7款适用老旧设备并对初学者非常友好的轻量级Linux发行版
我们由从 7 到 1 的顺序向大家介绍. 7. Linux Lite 正如其名,Linux Lite 是 Linux 发行版的一个轻量级版本,用户并不需要强大的硬件就可以将它跑起来,而且其使用非常简单 ...
- 腾讯大规模Hadoop集群实践 [转程序员杂志]
TDW(Tencent distributed Data Warehouse,腾讯分布式数据仓库)基于开源软件Hadoop和Hive进行构建,打破了传统数据仓库不能线性扩展.可控性差的局限,并且根据腾 ...