.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 ...
随机推荐
- mysql 使用记号
1. 避免重复入库的插入记录方法 向一个数据库中插入且在未存在的情况下插入一行记录.若有主键可以区分则可以使用 replace into 方法, 单偏偏很多时候数据库设计者会设计自增主键,replac ...
- TextView随键盘弹出上移高度
很多时候我们都在为键盘遮挡了原本就不大的屏幕时而烦恼,特别是当用户处于编辑状态时,键盘下面的内容就看不见了,用户只能处于盲打状态了.现在有一种简单的解决办法,基本思路就是,添加通知.一直监听键盘事件, ...
- 有趣Web之Json(四)---json与(Object/List/Map)相互转化
干web报名时间.通常,他们需要json转换为Object/list/map要么Object/List/map转换为json,由能够编写代码的简单包装非常多,以减轻负担. 本文将给出json的一系列的 ...
- Linux 经常使用 性能 检测 命令 说明
1.uptime [root@smgsim02 ~]# uptime 15:08:15 up 98 days, 4:19, 2 users, load average: 0.07, 0.29, ...
- PAT 1006. Sign In and Sign Out
#include<iostream> #include<string> using namespace std; int main(){ int cnt;cin>> ...
- jQuery数字加减插件
jQuery数字加减插件 我们在网上购物提交订单时,在网页上一般会有一个选择数量的控件,要求买家选择购买商品的件数,开发者会把该控件做成可以通过点击实现加减等微调操作,当然也可以直接输入数字件数.本文 ...
- Java 之JavaBean 、EJB 和POJO
由于是创业公司,开发人员较少,所以公司临时决定让几个C的程序猿临时客串Java.所以避免不了有很多基础问题,今天就有两个人都问我,JavaBean和POJO的区别,我可按照自己的理解给他们大致说了下, ...
- jQuery EasyUI API - Base - Draggable [原创汉化官方API]
最近在学习jQuery EasyUI,发现中文的文档好少,部分文档不错但它是鸟语的,为了大家也为了自己学习吧,汉化做一下笔记. 有没有说清楚的,或者翻译不正确的地方还请大家谅解指出.. 由于工作时间原 ...
- Objective C多态
面向对象的封装的三个基本特征是.继承和多态. 包是一组简单的数据结构和定义相关的操作在上面的其合并成一个类,继承1种亲子关系,子类能够拥有父类定的成员变量.属性以及方法. 多态就是指父类中定义的成员变 ...
- MVC文件上传与下载
MVC文件上传与下载 MVC文件上传与下载 想想自己从毕业到工作也有一年多,以前公司的任务的比较重,项目中有的时候需要用到什么东西都去搜索一下,基础知识感觉还没有以前在学校中的好.最近开始写博客,真的 ...