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

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

l  正向思维:

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

l  反向思维:

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

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

 

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

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

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

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

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

 

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

 

 

 

 

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

 

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

 

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

 

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

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

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

 

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

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

 

代码:

using System;
namespace SFS.Entity.Model
{
    /// summary
    /// c_hbbb_code
    /// summary
    [Serializable]
    public class c_hbbb_code
    {
        public c_hbbb_code()
        { }
        private int _CodeID = 0;
        /// <summary>
        /// 
        /// </summary>
        public int CodeID
        {
            get { return _CodeID; }
            set { _CodeID = value; }
        }
        private string _CODENO = "";
        /// <summary>
        /// 
        /// </summary>
        public string CODENO
        {
            get { return _CODENO; }
            set { _CODENO = value; }
        }
        private string _CODENAME = "";
        /// <summary>
        /// 
        /// </summary>
        public string CODENAME
        {
            get { return _CODENAME; }
            set { _CODENAME = value; }
        }
        private string _ISMX = "";
        /// <summary>
        /// 
        /// </summary>
        public string ISMX
        {
            get { return _ISMX; }
            set { _ISMX = value; }
        }
        private string _ParentCodeNO = "";
        /// <summary>
        /// 
        /// </summary>
        public string ParentCodeNO
        {
            get { return _ParentCodeNO; }
            set { _ParentCodeNO = value; }
        }
        private string _ZT = "";
        /// <summary>
        /// 
        /// </summary>
        public string ZT
        {
            get { return _ZT; }
            set { _ZT = value; }
        }
    }
}

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

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

namespace SFS.DAL
{
    public class c_hbbb_code
    {


        private SFS.Utility.DbUtility.DbHelper db = null;

        /// <summary>
        /// 是否存在该记录
        /// </summary>
        public bool Exists(string CodeID)
        {
          
            string strSql = "SELECT count(1) FROM c_hbbb_code WHERE  CodeID=@CodeID ";
            DbCommand dbCommand = db.GetSqlStringCommand(strSql);
            db.AddInParameter(dbCommand, "CodeID", DbType.String, CodeID);

            int result;
            object obj = db.ExecuteScalar(dbCommand);
            int.TryParse(obj.ToString(), out result);
            if (result == 1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }


        /// <summary>
        ///  增加一条数据
        /// </summary>
        public int Add(SFS.Entity.Model.c_hbbb_code model)
        {
            return Add(model, null);
        }

        /// <summary>
        ///  增加一条数据
        /// </summary>
        public int Add(SFS.Entity.Model.c_hbbb_code model, DbTransaction transaction)
        {
            try
            {
                string strSql = "INSERT INTO c_hbbb_code(CodeID,CODENO,CODENAME,ISMX,ParentCodeNO,ZT)VALUES(@CodeID,@CODENO,@CODENAME,@ISMX,@ParentCodeNO,@ZT)";
                DbCommand dbCommand = 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);

                if (transaction == null)
                {
                    return db.ExecuteNonQuery(dbCommand);
                }
                else
                {
                    return db.ExecuteNonQuery(dbCommand, transaction);
                }
            }
            catch (AddException addex)
            {
                addex.DeveloperMessage = "添加c_hbbb_code记录失败!" + addex.Message + "在" + this.ToString() + ".Add(SFS.Entity.Model.c_hbbb_code model)中";
                addex.UserMessage = "添加c_hbbb_code记录失败!";
                throw addex;
            }
        }

        /// <summary>
        ///  更新一条数据
        /// </summary>
        public int Update(SFS.Entity.Model.c_hbbb_code model)
        {
            return Update(model, null);
        }

        /// <summary>
        ///  更新一条数据
        /// </summary>
        public int Update(SFS.Entity.Model.c_hbbb_code model, DbTransaction transaction)
        {
            try
            {
                string strSql = "UPDATE c_hbbb_code SET CODENO=@CODENO,CODENAME=@CODENAME,ISMX=@ISMX,ParentCodeNO=@ParentCodeNO,ZT=@ZT	WHERE  CodeID=@CodeID ";
                DbCommand dbCommand = 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);

                if (transaction == null)
                {
                    return db.ExecuteNonQuery(dbCommand);
                }
                else
                {
                    return db.ExecuteNonQuery(dbCommand, transaction);
                }
            }
            catch (UpdateException updateex)
            {
                updateex.DeveloperMessage = "修改c_hbbb_code记录失败!" + updateex.Message + "在" + this.ToString() + ".Update(SFS.Entity.Model.c_hbbb_code model)中";
                updateex.UserMessage = "修改c_hbbb_code记录失败!";
                throw updateex;
            }
        }

        /// <summary>
        /// 删除一条数据
        /// </summary>
        public int Delete(string CodeID)
        {
            return Delete(CodeID, null);
        }

        /// <summary>
        /// 删除一条数据
        /// </summary>
        public int Delete(string CodeID, DbTransaction transaction)
        {
            try
            {
                if (string.IsNullOrEmpty(CodeID))
                {
                    NOIsNullOrEmptyException exception = new NOIsNullOrEmptyException();
                    exception.DeveloperMessage = "CodeID编号不能为空!在" + this.ToString() + ".Delete(string CodeID)中";
                    exception.UserMessage = "CodeID编号不能为空!";
                    throw exception;
                }


                string strSql = "DELETE FROM c_hbbb_code WHERE  CodeID=@CodeID ";
                DbCommand dbCommand = db.GetSqlStringCommand(strSql);
                db.AddInParameter(dbCommand, "CodeID", DbType.String, CodeID);

                if (transaction == null)
                {
                    return db.ExecuteNonQuery(dbCommand);
                }
                else
                {
                    return db.ExecuteNonQuery(dbCommand, transaction);
                }
            }
            catch (DeleteException deleteex)
            {
                deleteex.DeveloperMessage = "删除c_hbbb_code记录失败!" + deleteex.Message + "在" + this.ToString() + ".Delete(string CodeID)中";
                deleteex.UserMessage = "删除c_hbbb_code记录失败!";
                throw deleteex;
            }
        }

        /// <summary>
        /// 得到一个对象实体
        /// </summary>
        public SFS.Entity.Model.c_hbbb_code GetModel(string CodeID)
        {
            if (string.IsNullOrEmpty(CodeID))
            {
                NOIsNullOrEmptyException exception = new NOIsNullOrEmptyException();
                exception.DeveloperMessage = "CodeID编号不能为空!在" + this.ToString() + ".GetModel(string CodeID)中";
                exception.UserMessage = "CodeID编号不能为空!";
                throw exception;
            }

            StringBuilder strSql = new StringBuilder();
            strSql.Append("SELECT CodeID,CODENO,CODENAME,ISMX,ParentCodeNO,ZT ");
            strSql.Append(" FROM c_hbbb_code ");
            strSql.Append(" WHERE  CodeID=@CodeID ");

            DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString());
            db.AddInParameter(dbCommand, "CodeID", DbType.String, CodeID);


            SFS.Entity.Model.c_hbbb_code model = null;
            using (IDataReader dataReader = db.ExecuteReader(dbCommand))
            {
                if (dataReader.Read())
                {
                    model = ReaderBind(dataReader);
                }
            }
            return model;
        }

        /// <summary>
        /// 获得数据列表
        /// </summary>
        public DataSet GetDataSet(string strWhere)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append("SELECT CodeID,CODENO,CODENAME,ISMX,ParentCodeNO,ZT ");
                strSql.Append(" FROM c_hbbb_code ");
                if (strWhere.Trim() != "")
                {
                    strSql.Append(" WHERE " + strWhere);
                }
                return db.ExecuteDataSet(CommandType.Text, strSql.ToString());
            }
            catch (SelectException selectex)
            {
                selectex.DeveloperMessage = "查询记录失败!" + selectex.Message + "在" + this.ToString() + ".GetDataSet(string strWhere)中";
                selectex.UserMessage = "查询记录失败!";
                throw selectex;
            }
        }

        /// <summary>
        /// 获得数据列表(比DataSet效率高,推荐使用)
        /// </summary>
        public List<SFS.Entity.Model.c_hbbb_code> GetList(string strWhere)
        {
            try
            {
                StringBuilder strSql = new StringBuilder();
                strSql.Append("SELECT CodeID,CODENO,CODENAME,ISMX,ParentCodeNO,ZT ");
                strSql.Append(" FROM c_hbbb_code ");
                if (strWhere.Trim() != "")
                {
                    strSql.Append(" WHERE " + strWhere);
                }
                List<SFS.Entity.Model.c_hbbb_code> list = new List<SFS.Entity.Model.c_hbbb_code>();
                using (IDataReader dataReader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
                {
                    while (dataReader.Read())
                    {
                        list.Add(ReaderBind(dataReader));
                    }
                }
                return list;
            }
            catch (SelectException selectex)
            {
                selectex.DeveloperMessage = "查询记录失败!" + selectex.Message + "在" + this.ToString() + ".GetList(string strWhere)中";
                selectex.UserMessage = "查询记录失败!";
                throw selectex;
            }
        }


        /// <summary>
        /// 对象实体绑定数据
        /// </summary>
        public SFS.Entity.Model.c_hbbb_code ReaderBind(IDataReader dataReader)
        {
            SFS.Entity.Model.c_hbbb_code model = new SFS.Entity.Model.c_hbbb_code();
            object obj;

            obj = dataReader["CodeID"];
            if (obj != null && obj != DBNull.Value)
            {
                model.CodeID = (int)obj;
            }

            obj = dataReader["CODENO"];
            if (obj != null && obj != DBNull.Value)
            {
                model.CODENO = obj.ToString();
            }

            obj = dataReader["CODENAME"];
            if (obj != null && obj != DBNull.Value)
            {
                model.CODENAME = obj.ToString();
            }

            obj = dataReader["ISMX"];
            if (obj != null && obj != DBNull.Value)
            {
                model.ISMX = obj.ToString();
            }

            obj = dataReader["ParentCodeNO"];
            if (obj != null && obj != DBNull.Value)
            {
                model.ParentCodeNO = obj.ToString();
            }

            obj = dataReader["ZT"];
            if (obj != null && obj != DBNull.Value)
            {
                model.ZT = obj.ToString();
            }

            return model;
        }

      }
}

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

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

namespace SFS.BLL
{
    /// <summary>
    /// 业务逻辑类bllADDRESS 的摘要说明。
    /// </summary>
    public class c_hbbb_code
    {
        private readonly SFS.DAL.c_hbbb_code dal = new SFS.DAL.c_hbbb_code();
        public c_hbbb_code()
        { }
        #region  成员方法
        /// <summary>
        /// 是否存在该记录
        /// </summary>
        public bool Exists(string CodeID)
        {
            try
            {
                return dal.Exists(CodeID);
            }
            catch (ExceptionBase ex)
            {
                SFS.Utility.ExceptionUtility.ExceptionHelper.HandleException(ex, Policy.BLLPolicy);
                return false;
            }
        }

        /// <summary>
        /// 增加一条数据
        /// </summary>
        public int Add(SFS.Entity.Model.c_hbbb_code model)
        {
            try
            {
                return dal.Add(model);
            }
            catch (ExceptionBase ex)
            {
                SFS.Utility.ExceptionUtility.ExceptionHelper.HandleException(ex, Policy.BLLPolicy);
                return 0;
            }
        }

        /// <summary>
        /// 更新一条数据
        /// </summary>
        public int Update(SFS.Entity.Model.c_hbbb_code model)
        {
            try
            {
                return dal.Update(model);
            }
            catch (ExceptionBase ex)
            {
                SFS.Utility.ExceptionUtility.ExceptionHelper.HandleException(ex, Policy.BLLPolicy);
                return 0;
            }
        }

        /// <summary>
        /// 删除一条数据
        /// </summary>
        public int Delete(string CodeID)
        {
            try
            {
                return dal.Delete(CodeID);
            }
            catch (ExceptionBase ex)
            {
                SFS.Utility.ExceptionUtility.ExceptionHelper.HandleException(ex, Policy.BLLPolicy);
                return 0;
            }
        }

        /// <summary>
        /// 得到一个对象实体
        /// </summary>
        public SFS.Entity.Model.c_hbbb_code GetModel(string CodeID)
        {
            try
            {
                return dal.GetModel(CodeID);
            }
            catch (ExceptionBase ex)
            {
                SFS.Utility.ExceptionUtility.ExceptionHelper.HandleException(ex, Policy.BLLPolicy);
                return null;
            }
        }


        /// <summary>
        /// 获得数据列表
        /// </summary>
        public DataSet GetDataSet(string strWhere)
        {
            try
            {
                return dal.GetDataSet(strWhere);
            }
            catch (ExceptionBase ex)
            {
                SFS.Utility.ExceptionUtility.ExceptionHelper.HandleException(ex, Policy.BLLPolicy);
                return null;
            }
        }

        /// <summary>
        /// <summary>
        /// 获得数据列表
        /// </summary>
        public List<SFS.Entity.Model.c_hbbb_code> GetList(string strWhere)
        {
            try
            {
                return dal.GetList(strWhere);
            }
            catch (ExceptionBase ex)
            {
                SFS.Utility.ExceptionUtility.ExceptionHelper.HandleException(ex, Policy.BLLPolicy);
                return null;
            }
        }
      
      
        #endregion  成员方法

     

    }
}

5.UI层(用户界面)

 

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

 

常用界面功能代码

界面模式:单选(新建,删除,修改,查看)

功能名称

查询 新建 删除 修改 查看

数据列表

 

 

加载数据


分页


自动加入序号


添加


删除


修改


查看


导出


 

 

加载数据

privatevoid LoadData(string
{
SFS.Bll.c_hbbb_code objC_SUBCOMPANY=new
this.GridView1.DataSource = objC_SUBCOMPANY.GetList(“”);
this.GridView1.DataBind();
}

分页

protectedvoidGridView1_PageIndexChanging(objectsender,GridViewPageEventArgs
{
this.GridView1.PageIndex = e.NewPageIndex;
LoadData(“”);
}

绑定时自动加入序号

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
      if (e.Row.RowType == DataControlRowType.DataRow)
      {
RadioButton rb = (RadioButton)e.Row.FindControl("rbSelect");
rb.Attributes.Add("onclick", "CheckOne(this);");
e.Row.Cells[1].Text = Convert.ToString(e.Row.RowIndex + 1);
       }
}

添加

protectedvoid btnAdd_Click(object sender, EventArgs
{
    Response.Redirect("Add.aspx?JGDM="
}

删除

protectedvoid btnUpdate_Click(object sender, EventArgs
{
    foreach (GridViewRow row in
    {
RadioButton"rbSelect") as RadioButton;
ifnull
{
       Label lblID = (Label)row.FindControl("lblJGDM");
       Response.Redirect("Delete.aspx?JGDM="
       break;
        }
}
}


修改

protectedvoid btnUpdate_Click(object sender, EventArgs
{
    foreach (GridViewRow row in
    {
RadioButton"rbSelect") as RadioButton;
ifnull
{
       Label lblID = (Label)row.FindControl("lblJGDM");
       Response.Redirect("Update.aspx?JGDM="
       break;
        }
}
}

一般写界面代码逻辑顺序

步骤




1

Page_Load

中判断Session是否超时。


获取页面参数。


加载初始化控件(DropDownList,TextBox等控件)。

调用BBL层。

执行初始化查询绑定GridView控件。

调用BBL层。

2

Button_Click

判断界面参数设置数据有效性

脚本判断,或页面上后台代码判断。

处理数据一般包括。

增加:跳转到增加页面。

删除:删除前要提示。

修改:先判断是否选中,跳转到修改页面,需要传递参数。

查询:先检查查询条件的有效性,再执行查询。


调用BLL层

判断是否刷新页面。


3

GridView

一般性代码(分页,加单选,多选处理,绑定超连接,特殊列处理)


获得选种行,传递相关参数。


4

其他特殊处理