您的位置:首页 > 编程语言

基于微软企业库的分层代码框架

2013-10-13 20:06 309 查看
微软stringradiobuttonnullexceptiondataset

一般我们都采用分层架构,

先思考业务,要解决什么样的业务问题,再去思考技术实现。

l正向思维:

界面(UI)—>业务逻辑(BLL)—>数据逻辑(DAL)—>数据实体(Model)—>数据存储(Db)

l反向思维:

数据存储(Db)—>数据实体(Model)—>数据逻辑(DAL)—>业务逻辑(BLL)—>界面(UI)。

从数据库推导到界面,从界面推导到数据库。搞清楚类之间的关系。数据之间传递关系。

界面(UI):由控件组成。系统与用户交互的窗口。

业务逻辑(BLL):封装业务处理功能。对象的组合,应用。

数据逻辑(DAL):对数据的操作(算法)。(增删改查的多样性),对象函数,方法。

数据实体(Model):操作的数据结构。对象属性

数据存储(Db):数据的存储持久化。(表)。

体会:程序=数据结构+算法,程序=类对象+类对象之间的关系。

我们的很多项目都是基于微软企业库5.0搭建的。具体说一下我们在企业级项目中是怎么应用的。下面是架构图:



1.基于微软企业库的工具类





封装了微软企业库访问数据库常用的最基本的操作。

2.Model层(数据库表映射)





封装了很多属性。对应数据库表c_hbbb_code

代码:

[c-sharp]viewplaincopy



odeusingSystem;


amespaceSFS.Entity.Model




//summary


//c_hbbb_code


//summary


[Serializable]


ublicclassc_hbbb_code


{


ublicc_hbbb_code()


{}


rivateint_CodeID=0;


//<summary>


//


//</summary>


ublicintCodeID


{


et{return_CodeID;}


et{_CodeID=value;}


}


rivatestring_CODENO="";


//<summary>


//


//</summary>


ublicstringCODENO


{


et{return_CODENO;}


et{_CODENO=value;}


}


rivatestring_CODENAME="";


//<summary>


//


//</summary>


ublicstringCODENAME


{


et{return_CODENAME;}


et{_CODENAME=value;}


}


rivatestring_ISMX="";


//<summary>


//


//</summary>


ublicstringISMX


{


et{return_ISMX;}


et{_ISMX=value;}


}


rivatestring_ParentCodeNO="";


//<summary>


//


//</summary>


ublicstringParentCodeNO


{


et{return_ParentCodeNO;}


et{_ParentCodeNO=value;}


}


rivatestring_ZT="";


//<summary>


//


//</summary>


ublicstringZT


{


et{return_ZT;}


et{_ZT=value;}


}


}




3.Dal层(封装数据库操作增,删,改,查)





[c-sharp]viewplaincopy



odenamespaceSFS.DAL




ublicclassc_hbbb_code


{






rivateSFS.Utility.DbUtility.DbHelperdb=null;




//<summary>


//是否存在该记录


//</summary>


ublicboolExists(stringCodeID)


{




tringstrSql="SELECTcount(1)FROMc_hbbb_codeWHERECodeID=@CodeID";


DbCommanddbCommand=db.GetSqlStringCommand(strSql);


db.AddInParameter(dbCommand,"CodeID",DbType.String,CodeID);




ntresult;


bjectobj=db.ExecuteScalar(dbCommand);


nt.TryParse(obj.ToString(),outresult);


f(result==1)


{


eturntrue;


}


lse


{


eturnfalse;


}


}






//<summary>


//增加一条数据


//</summary>


ublicintAdd(SFS.Entity.Model.c_hbbb_codemodel)


{


eturnAdd(model,null);


}




//<summary>


//增加一条数据


//</summary>


ublicintAdd(SFS.Entity.Model.c_hbbb_codemodel,DbTransactiontransaction)


{


ry


{


tringstrSql="INSERTINTOc_hbbb_code(CodeID,CODENO,CODENAME,ISMX,ParentCodeNO,ZT)VALUES(@CodeID,@CODENO,@CODENAME,@ISMX,@ParentCodeNO,@ZT)";


DbCommanddbCommand=db.GetSqlStringCommand(strSql);


db.AddInParameter(dbCommand,"CodeID",DbType.Int32,model.CodeID);


db.AddInParameter(dbCommand,"CODENO",DbType.String,model.CODENO);


db.AddInParameter(dbCommand,"CODENAME",DbType.String,model.CODENAME);


db.AddInParameter(dbCommand,"ISMX",DbType.String,model.ISMX);


db.AddInParameter(dbCommand,"ParentCodeNO",DbType.String,model.ParentCodeNO);


db.AddInParameter(dbCommand,"ZT",DbType.String,model.ZT);




f(transaction==null)


{


eturndb.ExecuteNonQuery(dbCommand);


}


lse


{


eturndb.ExecuteNonQuery(dbCommand,transaction);


}


}


atch(AddExceptionaddex)


{


addex.DeveloperMessage="添加c_hbbb_code记录失败!"+addex.Message+"在"+this.ToString()+".Add(SFS.Entity.Model.c_hbbb_codemodel)中";


addex.UserMessage="添加c_hbbb_code记录失败!";


hrowaddex;


}


}




//<summary>


//更新一条数据


//</summary>


ublicintUpdate(SFS.Entity.Model.c_hbbb_codemodel)


{


eturnUpdate(model,null);


}




//<summary>


//更新一条数据


//</summary>


ublicintUpdate(SFS.Entity.Model.c_hbbb_codemodel,DbTransactiontransaction)


{


ry


{


tringstrSql="UPDATEc_hbbb_codeSETCODENO=@CODENO,CODENAME=@CODENAME,ISMX=@ISMX,ParentCodeNO=@ParentCodeNO,ZT=@ZTWHERECodeID=@CodeID";


DbCommanddbCommand=db.GetSqlStringCommand(strSql);


db.AddInParameter(dbCommand,"CodeID",DbType.Int32,model.CodeID);


db.AddInParameter(dbCommand,"CODENO",DbType.String,model.CODENO);


db.AddInParameter(dbCommand,"CODENAME",DbType.String,model.CODENAME);


db.AddInParameter(dbCommand,"ISMX",DbType.String,model.ISMX);


db.AddInParameter(dbCommand,"ParentCodeNO",DbType.String,model.ParentCodeNO);


db.AddInParameter(dbCommand,"ZT",DbType.String,model.ZT);




f(transaction==null)


{


eturndb.ExecuteNonQuery(dbCommand);


}


lse


{


eturndb.ExecuteNonQuery(dbCommand,transaction);


}


}


atch(UpdateExceptionupdateex)


{


updateex.DeveloperMessage="修改c_hbbb_code记录失败!"+updateex.Message+"在"+this.ToString()+".Update(SFS.Entity.Model.c_hbbb_codemodel)中";


updateex.UserMessage="修改c_hbbb_code记录失败!";


hrowupdateex;


}


}




//<summary>


//删除一条数据


//</summary>


ublicintDelete(stringCodeID)


{


eturnDelete(CodeID,null);


}




//<summary>


//删除一条数据


//</summary>


ublicintDelete(stringCodeID,DbTransactiontransaction)


{


ry


{


f(string.IsNullOrEmpty(CodeID))


{


NOIsNullOrEmptyExceptionexception=newNOIsNullOrEmptyException();


exception.DeveloperMessage="CodeID编号不能为空!在"+this.ToString()+".Delete(stringCodeID)中";


exception.UserMessage="CodeID编号不能为空!";


hrowexception;


}






tringstrSql="DELETEFROMc_hbbb_codeWHERECodeID=@CodeID";


DbCommanddbCommand=db.GetSqlStringCommand(strSql);


db.AddInParameter(dbCommand,"CodeID",DbType.String,CodeID);




f(transaction==null)


{


eturndb.ExecuteNonQuery(dbCommand);


}


lse


{


eturndb.ExecuteNonQuery(dbCommand,transaction);


}


}


atch(DeleteExceptiondeleteex)


{


deleteex.DeveloperMessage="删除c_hbbb_code记录失败!"+deleteex.Message+"在"+this.ToString()+".Delete(stringCodeID)中";


deleteex.UserMessage="删除c_hbbb_code记录失败!";


hrowdeleteex;


}


}




//<summary>


//得到一个对象实体


//</summary>


ublicSFS.Entity.Model.c_hbbb_codeGetModel(stringCodeID)


{


f(string.IsNullOrEmpty(CodeID))


{


NOIsNullOrEmptyExceptionexception=newNOIsNullOrEmptyException();


exception.DeveloperMessage="CodeID编号不能为空!在"+this.ToString()+".GetModel(stringCodeID)中";


exception.UserMessage="CodeID编号不能为空!";


hrowexception;


}




StringBuilderstrSql=newStringBuilder();


strSql.Append("SELECTCodeID,CODENO,CODENAME,ISMX,ParentCodeNO,ZT");


strSql.Append("FROMc_hbbb_code");


strSql.Append("WHERECodeID=@CodeID");




DbCommanddbCommand=db.GetSqlStringCommand(strSql.ToString());


db.AddInParameter(dbCommand,"CodeID",DbType.String,CodeID);






SFS.Entity.Model.c_hbbb_codemodel=null;


sing(IDataReaderdataReader=db.ExecuteReader(dbCommand))


{


f(dataReader.Read())


{


model=ReaderBind(dataReader);


}


}


eturnmodel;


}




//<summary>


//获得数据列表


//</summary>


ublicDataSetGetDataSet(stringstrWhere)


{


ry


{


StringBuilderstrSql=newStringBuilder();


strSql.Append("SELECTCodeID,CODENO,CODENAME,ISMX,ParentCodeNO,ZT");


strSql.Append("FROMc_hbbb_code");


f(strWhere.Trim()!="")


{


strSql.Append("WHERE"+strWhere);


}


eturndb.ExecuteDataSet(CommandType.Text,strSql.ToString());


}


atch(SelectExceptionselectex)


{


selectex.DeveloperMessage="查询记录失败!"+selectex.Message+"在"+this.ToString()+".GetDataSet(stringstrWhere)中";


selectex.UserMessage="查询记录失败!";


hrowselectex;


}


}




//<summary>


//获得数据列表(比DataSet效率高,推荐使用)


//</summary>


ublicList<SFS.Entity.Model.c_hbbb_code>GetList(stringstrWhere)


{


ry


{


StringBuilderstrSql=newStringBuilder();


strSql.Append("SELECTCodeID,CODENO,CODENAME,ISMX,ParentCodeNO,ZT");


strSql.Append("FROMc_hbbb_code");


f(strWhere.Trim()!="")


{


strSql.Append("WHERE"+strWhere);


}


List<SFS.Entity.Model.c_hbbb_code>list=newList<SFS.Entity.Model.c_hbbb_code>();


sing(IDataReaderdataReader=db.ExecuteReader(CommandType.Text,strSql.ToString()))


{


hile(dataReader.Read())


{


list.Add(ReaderBind(dataReader));


}


}


eturnlist;


}


atch(SelectExceptionselectex)


{


selectex.DeveloperMessage="查询记录失败!"+selectex.Message+"在"+this.ToString()+".GetList(stringstrWhere)中";


selectex.UserMessage="查询记录失败!";


hrowselectex;


}


}






//<summary>


//对象实体绑定数据


//</summary>


ublicSFS.Entity.Model.c_hbbb_codeReaderBind(IDataReaderdataReader)


{


SFS.Entity.Model.c_hbbb_codemodel=newSFS.Entity.Model.c_hbbb_code();


bjectobj;




obj=dataReader["CodeID"];


f(obj!=null&&obj!=DBNull.Value)


{


model.CodeID=(int)obj;


}




obj=dataReader["CODENO"];


f(obj!=null&&obj!=DBNull.Value)


{


model.CODENO=obj.ToString();


}




obj=dataReader["CODENAME"];


f(obj!=null&&obj!=DBNull.Value)


{


model.CODENAME=obj.ToString();


}




obj=dataReader["ISMX"];


f(obj!=null&&obj!=DBNull.Value)


{


model.ISMX=obj.ToString();


}




obj=dataReader["ParentCodeNO"];


f(obj!=null&&obj!=DBNull.Value)


{


model.ParentCodeNO=obj.ToString();


}




obj=dataReader["ZT"];


f(obj!=null&&obj!=DBNull.Value)


{


model.ZT=obj.ToString();


}




eturnmodel;


}




}





4.Bll层(跟具体业务有关的逻辑)






[c-sharp]viewplaincopy



odenamespaceSFS.BLL




//<summary>


//业务逻辑类bllADDRESS的摘要说明。


//</summary>


ublicclassc_hbbb_code


{


rivatereadonlySFS.DAL.c_hbbb_codedal=newSFS.DAL.c_hbbb_code();


ublicc_hbbb_code()


{}


#region成员方法


//<summary>


//是否存在该记录


//</summary>


ublicboolExists(stringCodeID)


{


ry


{


eturndal.Exists(CodeID);


}


atch(ExceptionBaseex)


{


SFS.Utility.ExceptionUtility.ExceptionHelper.HandleException(ex,Policy.BLLPolicy);


eturnfalse;


}


}




//<summary>


//增加一条数据


//</summary>


ublicintAdd(SFS.Entity.Model.c_hbbb_codemodel)


{


ry


{


eturndal.Add(model);


}


atch(ExceptionBaseex)


{


SFS.Utility.ExceptionUtility.ExceptionHelper.HandleException(ex,Policy.BLLPolicy);


eturn0;


}


}




//<summary>


//更新一条数据


//</summary>


ublicintUpdate(SFS.Entity.Model.c_hbbb_codemodel)


{


ry


{


eturndal.Update(model);


}


atch(ExceptionBaseex)


{


SFS.Utility.ExceptionUtility.ExceptionHelper.HandleException(ex,Policy.BLLPolicy);


eturn0;


}


}




//<summary>


//删除一条数据


//</summary>


ublicintDelete(stringCodeID)


{


ry


{


eturndal.Delete(CodeID);


}


atch(ExceptionBaseex)


{


SFS.Utility.ExceptionUtility.ExceptionHelper.HandleException(ex,Policy.BLLPolicy);


eturn0;


}


}




//<summary>


//得到一个对象实体


//</summary>


ublicSFS.Entity.Model.c_hbbb_codeGetModel(stringCodeID)


{


ry


{


eturndal.GetModel(CodeID);


}


atch(ExceptionBaseex)


{


SFS.Utility.ExceptionUtility.ExceptionHelper.HandleException(ex,Policy.BLLPolicy);


eturnnull;


}


}






//<summary>


//获得数据列表


//</summary>


ublicDataSetGetDataSet(stringstrWhere)


{


ry


{


eturndal.GetDataSet(strWhere);


}


atch(ExceptionBaseex)


{


SFS.Utility.ExceptionUtility.ExceptionHelper.HandleException(ex,Policy.BLLPolicy);


eturnnull;


}


}




//<summary>


//<summary>


//获得数据列表


//</summary>


ublicList<SFS.Entity.Model.c_hbbb_code>GetList(stringstrWhere)


{


ry


{


eturndal.GetList(strWhere);


}


atch(ExceptionBaseex)


{


SFS.Utility.ExceptionUtility.ExceptionHelper.HandleException(ex,Policy.BLLPolicy);


eturnnull;


}


}






#endregion成员方法








}




5.UI层(用户界面)



常用界面功能代码





加载数据

privatevoidLoadData(stringSJJG)

{

SFS.Bll.c_hbbb_codeobjC_SUBCOMPANY=newSFS.Bll.c_hbbb_code();

this.GridView1.DataSource=objC_SUBCOMPANY.GetList(“”);

this.GridView1.DataBind();

}

分页

protectedvoidGridView1_PageIndexChanging(objectsender,GridViewPageEventArgse)

{

this.GridView1.PageIndex=e.NewPageIndex;

LoadData(“”);

}

绑定时自动加入序号

protectedvoidGridView1_RowDataBound(objectsender,GridViewRowEventArgse)

{

if(e.Row.RowType==DataControlRowType.DataRow)

{

RadioButtonrb=(RadioButton)e.Row.FindControl("rbSelect");

rb.Attributes.Add("onclick","CheckOne(this);");

e.Row.Cells[1].Text=Convert.ToString(e.Row.RowIndex+1);

}

}

添加

protectedvoidbtnAdd_Click(objectsender,EventArgse)

{

Response.Redirect("Add.aspx?JGDM="+SJJG);

}

删除

protectedvoidbtnUpdate_Click(objectsender,EventArgse)

{

foreach(GridViewRowrowinGridView1.Rows)

{

RadioButtonradio=row.FindControl("rbSelect")asRadioButton;

if(radio!=null&&radio.Checked)

{

LabellblID=(Label)row.FindControl("lblJGDM");

Response.Redirect("Delete.aspx?JGDM="+SJJG);

break;

}

}

}

修改

protectedvoidbtnUpdate_Click(objectsender,EventArgse)

{

foreach(GridViewRowrowinGridView1.Rows)

{

RadioButtonradio=row.FindControl("rbSelect")asRadioButton;

if(radio!=null&&radio.Checked)

{

LabellblID=(Label)row.FindControl("lblJGDM");

Response.Redirect("Update.aspx?JGDM="+SJJG);

break;

}

}

}

一般写界面代码逻辑顺序



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: