基于微软企业库的分层代码框架
2013-10-13 20:06
309 查看
一般我们都采用分层架构,
先思考业务,要解决什么样的业务问题,再去思考技术实现。
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]
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]
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]
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;
}
}
}
一般写界面代码逻辑顺序
相关文章推荐
- 基于微软企业库的分层代码框架
- 基于微软企业库的分层代码框架
- 写了几年代码了,苦苦追寻,应该沉淀下来了,好好研究。net底层框架,以及较好的分层框架
- 【KJLibrary框架学习】基于BaseActivity的MyBaseActivity代码和用法
- 基于TCP,多线程的聊天框架代码
- 基于.NET平台的分层架构实战(九)——数据访问层的第三种实现:基于NBear框架的ORM实现
- 如何减少基于DataSet框架的代码输入量(一)
- 基于ExtJs框架实现高级查询界面的代码
- 基于DDD的.NET开发框架 - ABP分层设计
- 设计自己的基于Selenium 的自动化测试框架-Java版(3) - 给框架分分层
- Asp.net MVC 基于规则的权限设计(续)-- 扩展微软企业库安全模块
- 如何减少基于DataSet框架的代码输入量(二)
- [EntLib]微软企业库6 基于Data Access Application Block的Repository
- AIO: 微软一站式开发技术框架 2009-11-15 新增代码示例简介
- 一个基于jQuery ajax和.net httphandler 的超轻异步框架,千行代码完成。
- 如何减少基于DataSet框架的代码输入量(三)
- 基于微软ASP.NET AJAX框架开发幻灯片播放网页
- 基于.NET平台的分层架构实战(九)—数据访问层的第三种实现:基于NBear框架的ORM实现
- 基于微软ASP.NET AJAX框架开发幻灯片播放网页
- SRGAN基于keras实现代码框架