300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > asp.net三层架构详解

asp.net三层架构详解

时间:2024-03-11 22:09:14

相关推荐

asp.net三层架构详解

一、数据库

/*==============================================================*/

/*DBMSname:MicrosoftSQLServer2000*/

/*==============================================================*/

ifexists(select1

fromsysobjects

whereid=object_id('newsContent')

andtype='U')

droptablenewsContent

go

/*==============================================================*/

/*Table:newsContent*/

/*==============================================================*/

createtablenewsContent(

IDintidentity(1,1)primarykey,

Titlenvarchar(50)notnull,

Contentntextnotnull,

AddDatedatetimenotnull,

CategoryIDintnotnull

)

go

二、项目文件架构

实现步骤为:4-3-6-5-2-1

实现步骤过程

1、创建Model,实现业务实体。

2、创建IDAL,实现接口。

3、创建SQLServerDAL,实现接口里的方法。

4、增加web.config里的配置信息,为SQLServerDAL的程序集。

5、创建DALFactory,返回程序集的指定类的实例。

6、创建BLL,调用DALFactory,得到程序集指定类的实例,完成数据操作方法。

7、创建WEB,调用BLL里的数据操作方法。

注意:

1、web.config里的程序集名称必须与SQLServerDAL里的输出程序集名称一致。

2、DALFactory里只需要一个DataAccess类,可以完成创建所有的程序集实例。

3、项目创建后,注意修改各项目的默认命名空间和程序集名称。

4、注意修改解决方案里的项目依赖。

5、注意在解决方案里增加各项目引用。

三、各层间的访问过程

1、传入值,将值进行类型转换(为整型)。

2、创建BLL层的content.cs对象c,通过对象c访问BLL层的方法GetContentInfo(ID)调用BLL层。

3、BLL层方法GetContentInfo(ID)中取得数据访问层SQLServerDAL的实例,实例化IDAL层的接口对象dal,这个对象是由工厂层DALFactory创建的,然后返回IDAL层传入值所查找的内容的方法dal.GetContentInfo(id)。

4、数据工厂通过web.config配置文件中给定的webdal字串访问SQLServerDAL层,返回一个完整的调用SQLServerDAL层的路径给 BLL层。

5、到此要调用SQLServerDAL层,SQLServerDAL层完成赋值Model层的对象值为空,给定一个参数,调用SQLServerDAL层的SqlHelper的ExecuteReader方法,读出每个字段的数据赋值给以定义为空的Model层的对象。

6、SqlHelper执行sql命令,返回一个指定连接的数据库记录集,在这里需要引用参数类型,提供为打开连接命令执行做好准备PrepareCommand。

7、返回Model层把查询得到的一行记录值赋值给SQLServerDAL层的引入的Model层的对象ci,然后把这个对象返回给BLL。

8、回到Web层的BLL层的方法调用,把得到的对象值赋值给Lable标签,在前台显示给界面

四、项目中的文件清单

1、DBUtility项目

(1)connectionInfo.cs

usingSystem;

usingSystem.Configuration;

namespaceUtility

{

///<summary>

///ConnectionInfo的摘要说明。

///</summary>

publicclassConnectionInfo

{

publicstaticstringGetSqlServerConnectionString()

{

returnConfigurationSettings.AppSettings["SQLConnString"];

}

}

}

2、SQLServerDAL项目

(1)SqlHelper.cs抽象类

usingSystem;

usingSystem.Data;

usingSystem.Data.SqlClient;

usingDBUtility;

namespaceSQLServerDAL

{

///<summary>

///SqlHelper的摘要说明。

///</summary>

publicabstractclassSqlHelper

{

publicstaticreadonlystringCONN_STR=ConnectionInfo.GetSqlServerConnectionString();

///<summary>

///用提供的函数,执行SQL命令,返回一个从指定连接的数据库记录集

///</summary>

///<remarks>

///例如:

///SqlDataReaderr=ExecuteReader(connString,CommandType.StoredProcedure,"PublishOrders",newSqlParameter("@prodid",24));

///</remarks>

///<paramname="connectionString">SqlConnection有效的SQL连接字符串</param>

///<paramname="commandType">CommandType:CommandType.Text、CommandType.StoredProcedure</param>

///<paramname="commandText">SQL语句或存储过程</param>

///<paramname="commandParameters">SqlParameter[]参数数组</param>

///<returns>SqlDataReader:执行结果的记录集</returns>

publicstaticSqlDataReaderExecuteReader(stringconnString,CommandTypecmdType,stringcmdText,paramsSqlParameter[]cmdParms)

{

SqlCommandcmd=newSqlCommand();

SqlConnectionconn=newSqlConnection(connString);

//我们在这里用try/catch是因为如果这个方法抛出异常,我们目的是关闭数据库连接,再抛出异常,

//因为这时不会有DataReader存在,此后commandBehaviour.CloseConnection将不会工作。

try

{

PrepareCommand(cmd,conn,null,cmdType,cmdText,cmdParms);

SqlDataReaderrdr=cmd.ExecuteReader(CommandBehavior.CloseConnection);

cmd.Parameters.Clear();

returnrdr;

}

catch

{

conn.Close();

throw;

}

}

///<summary>

///为执行命令做好准备:打开数据库连接,命令语句,设置命令类型(SQL语句或存储过程),函数语取。

///</summary>

///<paramname="cmd">SqlCommand组件</param>

///<paramname="conn">SqlConnection组件</param>

///<paramname="trans">SqlTransaction组件,可以为null</param>

///<paramname="cmdType">语句类型:CommandType.Text、CommandType.StoredProcedure</param>

///<paramname="cmdText">SQL语句,可以为存储过程</param>

///<paramname="cmdParms">SQL参数数组</param>

privatestaticvoidPrepareCommand(SqlCommandcmd,SqlConnectionconn,SqlTransactiontrans,CommandTypecmdType,stringcmdText,SqlParameter[]cmdParms)

{

if(conn.State!=ConnectionState.Open)

conn.Open();

cmd.Connection=conn;

mandText=cmdText;

if(trans!=null)

cmd.Transaction=trans;

mandType=cmdType;

if(cmdParms!=null)

{

foreach(SqlParameterparmincmdParms)

cmd.Parameters.Add(parm);

}

}

}

}

(2)Content.cs类

usingSystem;

usingSystem.Data;

usingSystem.Data.SqlClient;

usingModel;

usingIDAL;

namespaceSQLServerDAL

{

///<summary>

///Content的摘要说明。

///</summary>

publicclassContent:IContent

{

privateconststringPARM_ID="@ID";

privateconststringSQL_SELECT_CONTENT="SelectID,Title,Content,AddDate,CategoryIDFromnewsContentWhereID=@ID";

publicContentInfoGetContentInfo(intid)

{

//创意文章内容类

ContentInfoci=null;

//创建一个参数

SqlParameterparm=newSqlParameter(PARM_ID,SqlDbType.BigInt,8);

//赋上ID值

parm.Value=id;

using(SqlDataReadersdr=SqlHelper.ExecuteReader(SqlHelper.CONN_STR,CommandType.Text,SQL_SELECT_CONTENT,parm))

{

if(sdr.Read())

{

ci=newContentInfo(sdr.GetInt32(0),sdr.GetString(1),sdr.GetString(2),

sdr.GetDateTime(3),sdr.GetInt32(4),sdr.GetInt32(5),sdr.GetString(6));

}

}

returnci;

}

}

}

3、Model项目

(1)contentInfo.cs

usingSystem;

namespaceModel

{

///<summary>

///Class1的摘要说明。

///</summary>

publicclassContentInfo

{

privateint_ID;

privatestring_Content;

privatestring_Title;

privatestring_From;

privateDateTime_AddDate;

privateint_clsID;

privateint_tmpID;

///<summary>

///文章内容构造函数

///</summary>

///<paramname="id">文章流水号ID</param>

///<paramname="content">文章内容</param>

///<paramname="title">文章标题</param>

///<paramname="from">文章来源</param>

///<paramname="clsid">文章的分类属性ID</param>

///<paramname="tmpid">文章的模板属性ID</param>

publicContentInfo(intid,stringtitle,stringcontent,stringfrom,DateTimeaddDate,intclsid,inttmpid)

{

this._ID=id;

this._Content=content;

this._Title=title;

this._From=from;

this._AddDate=addDate;

this._clsID=clsid;

this._tmpID=tmpid;

}

//属性

publicintID

{

get{return_ID;}

}

publicstringContent

{

get{return_Content;}

}

publicstringTitle

{

get{return_Title;}

}

publicstringFrom

{

get{return_From;}

}

publicDateTimeAddDate

{

get{return_AddDate;}

}

publicintClsID

{

get{return_clsID;}

}

publicintTmpID

{

get{return_tmpID;}

}

}

}

4、IDAL项目

(1)Icontent.cs

usingSystem;

usingModel;

namespaceIDAL

{

///<summary>

///文章内容操作接口

///</summary>

publicinterfaceIContent

{

///<summary>

///取得文章的内容。

///</summary>

///<paramname="id">文章的ID</param>

///<returns></returns>

ContentInfoGetContentInfo(intid);

}

}

5、DALFactory项目

(1)Content.cs

usingSystem;

usingSystem.Reflection;

usingSystem.Configuration;

usingIDAL;

namespaceDALFactory

{

///<summary>

///工产模式实现文章接口。

///</summary>

publicclassContent

{

publicstaticIDAL.IContentCreate()

{

//这里可以查看DAL接口类。

stringpath=System.Configuration.ConfigurationSettings.AppSettings["WebDAL"].ToString();

stringclassName=path+".Content";

//用配置文件指定的类组合

return(IDAL.IContent)Assembly.Load(path).CreateInstance(className);

}

}

}

6、BLL项目

(1)Content.cs

usingSystem;

usingModel;

usingIDAL;

namespaceBLL

{

///<summary>

///Content的摘要说明。

///</summary>

publicclassContent

{

publicContentInfoGetContentInfo(intid)

{

//取得从数据访问层取得一个文章内容实例

IContentdal=DALFactory.Content.Create();

//用DAL查找文章内容

returndal.GetContentInfo(id);

}

}

}

7、Web项目

1、Web.config:

<appSettings>

<addkey="SQLConnString"value="DataSource=localhost;PersistSecurityinfo=True;InitialCatalog=newsDB;UserID=sa;Password="/>

<addkey="WebDAL"value="SQLServerDAL"/>

</appSettings>

2、WebUI.aspx

<%@Pagelanguage="c#"Codebehind="WebUI.aspx.cs"AutoEventWireup="false"Inherits="Web.WebUI"%>

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">

<HTML>

<HEAD>

<title>WebUI</title>

<metaname="GENERATOR"Content="7.1">

<metaname="CODE_LANGUAGE"Content="C#">

<metaname="vs_defaultClientScript"content="JavaScript">

<metaname="vs_targetSchema"content="/intellisense/ie5">

</HEAD>

<bodyMS_POSITIONING="GridLayout">

<formid="Form1"method="post"runat="server">

<FONT">宋体"></FONT>

<tablewidth="600"border="1">

<tr>

<tdstyle="WIDTH:173px">&nbsp;</td>

<td>&nbsp;

<asp:Labelid="lblTitle"runat="server"></asp:Label></td>

</tr>

<tr>

<tdstyle="WIDTH:173px;HEIGHT:22px">&nbsp;</td>

<tdstyle="HEIGHT:22px">&nbsp;

<asp:Labelid="lblDataTime"runat="server"></asp:Label></td>

</tr>

<tr>

<tdstyle="WIDTH:173px">&nbsp;</td>

<td>&nbsp;

<asp:Labelid="lblContent"runat="server"></asp:Label></td>

</tr>

<tr>

<tdstyle="WIDTH:173px">&nbsp;</td>

<td>&nbsp;</td>

</tr>

<tr>

<tdstyle="WIDTH:173px;HEIGHT:23px">&nbsp;</td>

<tdstyle="HEIGHT:23px">&nbsp;</td>

</tr>

<tr>

<tdstyle="WIDTH:173px">&nbsp;</td>

<td>&nbsp;</td>

</tr>

<tr>

<tdstyle="WIDTH:173px">&nbsp;</td>

<td>&nbsp;</td>

</tr>

<tr>

<tdstyle="WIDTH:173px">&nbsp;</td>

<td>&nbsp;</td>

</tr>

<tr>

<tdstyle="WIDTH:173px">&nbsp;</td>

<td>&nbsp;

<asp:Labelid="lblMsg"runat="server">Label</asp:Label></td>

</tr>

</table>

</form>

</body>

</HTML>

3、WebUI.aspx.cs后台调用显示:

usingSystem;

usingSystem.Collections;

ponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Web;

usingSystem.Web.SessionState;

usingSystem.Web.UI;

usingSystem.Web.UI.WebControls;

usingSystem.Web.UI.HtmlControls;

usingBLL;

usingModel;

namespacemyWeb

{

///<summary>

///WebForm1的摘要说明。

///</summary>

publicclassWebUI:System.Web.UI.Page

{

protectedSystem.Web.UI.WebControls.LabellblTitle;

protectedSystem.Web.UI.WebControls.LabellblDataTime;

protectedSystem.Web.UI.WebControls.LabellblContent;

protectedSystem.Web.UI.WebControls.LabellblMsg;

privateContentInfoci;

privatevoidPage_Load(objectsender,System.EventArgse)

{

if(!Page.IsPostBack)

{

GetContent("1");

}

}

privatevoidGetContent(stringid)

{

intID=WebComponents.CleanString.GetInt(id);

Contentc=newContent();

ci=c.GetContentInfo(ID);

if(ci!=null)

{

this.lblTitle.Text=ci.Title;

this.lblDataTime.Text=ci.AddDate.ToString("yyyy-MM-dd");

this.lblContent.Text=ci.Content;

}

else

{

this.lblMsg.Text="没有找到这篇文章";

}

}

#regionWeb窗体设计器生成的代码

overrideprotectedvoidOnInit(EventArgse)

{

//

//CODEGEN:该调用是Web窗体设计器所必需的。

//

InitializeComponent();

base.OnInit(e);

}

///<summary>

///设计器支持所需的方法-不要使用代码编辑器修改

///此方法的内容。

///</summary>

privatevoidInitializeComponent()

{

this.Load+=newSystem.EventHandler(this.Page_Load);

}

#endregion

}

}

4、WebComponents项目

(1)CleanString.cs

usingSystem;

usingSystem.Text;

namespacemyWeb.WebComponents

{

///<summary>

///CleanString的摘要说明。

///</summary>

publicclassCleanString

{

publicstaticintGetInt(stringinputString)

{

try

{

returnConvert.ToInt32(inputString);

}

catch

{

return0;

}

}

publicstaticstringInputText(stringinputString,intmaxLength)

{

StringBuilderretVal=newStringBuilder();

//checkincomingparametersfornullorblankstring

if((inputString!=null)&&(inputString!=String.Empty))

{

inputString=inputString.Trim();

//chopthestringincasetheclient-sidemaxlength

//fieldsarebypassedtopreventbufferover-runs

if(inputString.Length>maxLength)

inputString=inputString.Substring(0,maxLength);

//convertsomeharmfulsymbolsincasetheregular

//expressionvalidatorsarechanged

for(inti=0;i<inputString.Length;i++)

{

switch(inputString[i])

{

case'"':

retVal.Append("&quot;");

break;

case'<':

retVal.Append("&lt;");

break;

case'>':

retVal.Append("&gt;");

break;

default:

retVal.Append(inputString[i]);

break;

}

}

//Replacesinglequoteswithwhitespace

retVal.Replace("'","");

}

returnretVal.ToString();

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。