.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 ...
随机推荐
- select查询原理
原文:select查询原理 我并非专业DBA,但做为B/S架构的开发人员,总是离不开数据库,一般开发员只会应用SQL的四条经典语句:select ,insert,delete,update.但是我从来 ...
- c# socket 判断端口是否被占用
using System.Net; using System.Net.Sockets; using System.Net.NetworkInformation; IPGlobalProperties ...
- 自动生成Makefile文件
主要的工具有autoscan, aclocal, autoheader, autoconfig,automake 1 .创建c源文件hello.c #include <stdio.h> i ...
- 使用ButterKnife无法inject view的解决办法
使用ButterKnife做android开发时,发现无法inject,如下,tvInfo总是null. @InjectView(R.id.textView1Info) TextView tvInfo ...
- iOS发展 - 使用您自己的自定义字体
一位同事问我最后一次,XXapp字体如何萌啊? 我也想提出萌哒哒的字体!然后,今天有这blog. 首先,我们正处于iOS发展,苹果给了我们很多的字体,当然,我就不一一列举在这里,英文,小汤表示看不懂啦 ...
- POJ 3070 Fibonacci(矩阵高速功率)
职务地址:POJ 3070 用这个题学会了用矩阵高速幂来高速求斐波那契数. 依据上个公式可知,第1行第2列和第2行第1列的数都是第n个斐波那契数.所以构造矩阵.求高速幂就可以. 代码例如以下: #in ...
- C#创建服务及使用程序自动安装服务
.NET创建一个即是可执行程序又是Windows服务的exe 不得不说,.NET中安装服务很麻烦,即要创建Service,又要创建ServiceInstall,最后还要弄一堆命令来安装和卸载. 今天给 ...
- PHP 以POST方式提交XML、获取XML,最后解析XML
以POST方式提交XML // Do a POST $data="<?xml version='1.0' encoding='UTF-8'?> <TypeRsp> & ...
- IOC 在Mvc中的使用
IOC 在Mvc中的使用 IOC,是控制反转(Inversion of Control)的英文简写, 控制反转一般分为两种类型,依赖注入(Dependency Injection)和依赖查找(Depe ...
- 【通过操作指针,与指针做函数參数'实现字串在主串中出现的次数,然后将出现的部分依照要求进行替换
】
#include<stdio.h> #include<stdlib.h> int strTime(const char *str1, const char *str2, int ...