zoukankan      html  css  js  c++  java
  • cWeb开发框架,基于asp.net的cWeb应用开发平台介绍(二)

    cWeb是基于微软的.Net Framework 4框架,数据库是sql server 2008 r2。

    cWeb开发框架下载,点击这里去下载

    cWeb开发框架借鉴三层架构理论分为三层,分别是:cData、cBN和cWeb。cData是数据层,cBN是业务处理层,cWeb是业务展示层。解决方案如图示:

      

    一、cData数据层

    cData数据层,数据库字段的映射类。在其他开发框架中常见于datatable和dataview,也就是将数据库表映射成datatable,dataview继承datatable,并将其他如视图等的字段映射在dataview中。在类似于petshop等开发框架中分层可谓详细,虽然现在硬件的发展可以不用考虑继承、映射、调用等等的运行时间,但是对于大数据量下即使很小的优化都会起到极大的作用,所以直接的就是高效率的,简化后数据层都融合在了一起。

    data层数据示例:

    using System;
    
    namespace AA.cData
    {
        /// <summary>
        /// t_info 的摘要说明。
        /// </summary>
        [Serializable]
        public class t_infoDV
        {
            /// <summary>
            /// t_infoDV
            /// </summary>
            public t_infoDV()
            {
            }
    
            //============================数据库字段=================================//
    
            private long _ID = -1;
            /// <summary>
            /// ID
            /// </summary>
            public long ID
            {
                get
                {
                    return _ID;
                }
                set
                {
                    _ID = value;
                }
            }
    
            private string _t_info_title = null;
            /// <summary>
            /// t_info_title
            /// </summary>
            public string t_info_title
            {
                get
                {
                    return _t_info_title;
                }
                set
                {
                    _t_info_title = value;
                }
            }
    
            private DateTime _t_info_createtime = System.DateTime.MinValue;
            /// <summary>
            /// t_info_createtime
            /// </summary>
            public DateTime t_info_createtime
            {
                get
                {
                    return _t_info_createtime;
                }
                set
                {
                    _t_info_createtime = value;
                }
            }
    
    
    
    
            //============================扩展字段==================================//
    
            private string _t_info_title_like = null;
            /// <summary>
            /// t_info_title [模糊查询]
            /// </summary>
            public string t_info_title_like
            {
                get
                {
                    return _t_info_title_like;
                }
                set
                {
                    _t_info_title_like = value;
                }
            }
    
    
    
        }
    }
    

      

    二、cBN业务处理层

    cBN业务处理层,也可以叫业务逻辑层。是数据层之上用来处理业务逻辑的方法,将除了web之外的所有业务处理都可以放在这个层里,比如添加、修改、删除、各种查询等方法,在web层仅仅调用一下就可以实现功能,也体现了业务逻辑通用原则,这样同样的业务处理就可以重复调用,提高了开发效率,减少了代码的冗长重复。

     BN层示例:

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    using System.Data;
    using System.Data.SqlClient;
    
    using cDB;
    using AA.cData;
    
    namespace AA.cBN
    {
        /// <summary>
        /// t_info 的摘要说明。
        /// </summary>
        public class t_infoBN
        {
            DataInfo cDI;
    
            /// <summary>
            /// t_infoBN
            /// </summary>
            public t_infoBN()
            {
                cDI = new DataInfo();
            }
    
    
            #region [添加|修改|删除]
    
            /// <summary>
            /// [添加]
            /// </summary>
            /// <param name="tDV"></param>
            /// <param name="msg"></param>
            /// <returns></returns>
            public int Add(t_infoDV tDV, out string msg)
            {
                try
                {
                    mCommand oCommand = new mCommand();
    
                    oCommand.SqlTxt = "Insert into t_info(t_info_title,t_info_createtime)" +
                                        " values(@t_info_title,@t_info_createtime)";
    
    
                    SqlParameter[] SqlItems = new SqlParameter[2];
    
                    SqlItems[0] = new SqlParameter("@t_info_title", SqlDbType.NVarChar);
                    SqlItems[0].Value = tDV.t_info_title;
    
                    SqlItems[1] = new SqlParameter("@t_info_createtime", SqlDbType.DateTime);
                    SqlItems[1].Value = tDV.t_info_createtime;
    
    
    
    
                    oCommand.AddParameter(SqlItems);
    
                    int iResult = cDI.iCommandSql(oCommand);
    
                    if (iResult > -1)
                    {
                        msg = "添加成功!";
                    }
                    else
                    {
                        msg = "添加失败!";
                    }
    
                    return iResult;
    
                }
                catch //(Exception ex)
                {
                    //msg = ex.Message;
                    msg = "添加失败(异常)!";
                    return -11;     //-11表示异常
                }
            }
    
            /// <summary>
            /// [修改]
            /// </summary>
            /// <param name="tDV"></param>
            /// <param name="msg"></param>
            /// <returns></returns>
            public int Edit(t_infoDV tDV, out string msg)
            {
    
                try
                {
                    mCommand oCommand = new mCommand();
    
                    oCommand.SqlTxt = "update t_info set " +
                                        "t_info_title=@t_info_title," +
                                        "t_info_createtime=@t_info_createtime " +
                                        "where ID=@ID";
    
    
                    SqlParameter[] SqlItems = new SqlParameter[3];
    
                    SqlItems[0] = new SqlParameter("@t_info_title", SqlDbType.NVarChar);
                    SqlItems[0].Value = tDV.t_info_title;
    
                    SqlItems[1] = new SqlParameter("@t_info_createtime", SqlDbType.DateTime);
                    SqlItems[1].Value = tDV.t_info_createtime;
    
                    SqlItems[2] = new SqlParameter("@ID", SqlDbType.BigInt);
                    SqlItems[2].Value = tDV.ID;
    
    
                    oCommand.AddParameter(SqlItems);
    
                    int iResult = cDI.iCommandSql(oCommand);
    
                    if (iResult > -1)
                    {
                        msg = "修改成功!";
                    }
                    else
                    {
                        msg = "修改失败!";
                    }
    
                    return iResult;
    
                }
                catch //(Exception ex)
                {
                    //msg = ex.Message;
                    msg = "添加失败(异常)!";
                    return -11;     //-11表示异常
                }
            }
    
            /// <summary>
            /// [删除]
            /// </summary>
            /// <param name="tDV"></param>
            /// <param name="msg"></param>
            /// <returns></returns>
            public int Del(t_infoDV tDV, out string msg)
            {
                try
                {
                    mCommand oCommand = new mCommand();
                    oCommand.SqlTxt = "delete t_info where ID=@ID";
                    SqlParameter[] SqlItems = new SqlParameter[1];
    
                    SqlItems[0] = new SqlParameter("@ID", SqlDbType.BigInt);
                    SqlItems[0].Value = tDV.ID;
    
                    oCommand.AddParameter(SqlItems);
    
                    int iResult = cDI.iCommandSql(oCommand);
    
                    if (iResult > -1)
                    {
                        msg = "删除成功!";
                    }
                    else
                    {
                        msg = "删除失败!";
                    }
    
                    return iResult;
                }
                catch //(Exception ex)
                {
                    //msg = ex.Message;
                    msg = "删除失败(异常)!";
                    return -11;     //-11表示异常
                }
            }
            #endregion
    
    
            #region [查询]
            /// <summary>
            /// [返回数据分页]
            /// </summary>
            /// <param name="tDV"></param>
            /// <param name="sqlWhere">where语句</param>
            /// <returns></returns>
            public DataTable GetDataList(t_infoDV tDV, string sqlWhere)
            {
    
                DataTable DTe = new DataTable();
    
                mCommand oCommand = new mCommand();
    
                StringBuilder SqlTxtPrefiex = new StringBuilder(" select ISNULL(count(ID),0) as Counts from View_t_info where 1 = 1 " + sqlWhere + " ");
                SqlParameter tSqlItem = null;
    
    
                if (tDV.t_info_title != null)
                {
                    SqlTxtPrefiex.Append(" and t_info_title = @t_info_title");
                    tSqlItem = new SqlParameter("@t_info_title", SqlDbType.NVarChar);
                    tSqlItem.Value = tDV.t_info_title;
                    oCommand.SqlParameters.Add(tSqlItem);
                }
    
                if (tDV.t_info_title_like != null)
                {
                    SqlTxtPrefiex.Append(" and t_info_title like @t_info_title_like");
                    tSqlItem = new SqlParameter("@t_info_title_like", SqlDbType.NVarChar);
                    tSqlItem.Value = "%" + tDV.t_info_title_like + "%";
                    oCommand.SqlParameters.Add(tSqlItem);
                }
    
    
    
                oCommand.SqlTxt = SqlTxtPrefiex.ToString();
    
                DTe = cDI.GetTable(oCommand);
                return DTe;
            }
    
            /// <summary>
            /// [返回数据]
            /// </summary>
            /// <param name="tDV"></param>
            /// <param name="column">显示的列,默认为【*】全部</param>
            /// <param name="sqlWhere">where语句</param>
            /// <param name="beginIndex">开始记录</param>
            /// <param name="endIndex">结束记录</param>
            /// <param name="Order">排序,如【order by ID desc】</param>
            /// <returns></returns>
            public DataTable GetDataList(t_infoDV tDV, string column, string sqlWhere, long beginIndex, long endIndex, string Order)
            {
                if (string.IsNullOrEmpty(column))
                    column = " * ";
    
                mCommand oCommand = new mCommand();
    
                StringBuilder cSqlTxtPrefiex = new StringBuilder("select * from NoPagedTable WHERE rowIndex>=@beginIndex and rowIndex<=@endIndex");
    
                SqlParameter[] SqlItems = new SqlParameter[2];
    
                SqlItems[0] = new SqlParameter("@beginIndex", SqlDbType.BigInt);
                SqlItems[0].Value = beginIndex;
    
                SqlItems[1] = new SqlParameter("@endIndex", SqlDbType.BigInt);
                SqlItems[1].Value = endIndex;
    
                oCommand.SqlParameters.AddRange(SqlItems);
    
    
                if (Order == string.Empty)
                {
                    Order = " order by ID DESC ";
                }
    
                StringBuilder SqlTxtPrefiex = new StringBuilder(
                    "WITH NoPagedTable AS " +
                    "(" +
                    "SELECT ROW_NUMBER() OVER (" + Order + ") AS rowIndex," + column + " FROM View_t_info where 1 = 1 " + sqlWhere + " ");
    
                SqlParameter tSqlItem = null;
    
                if (tDV.t_info_title != null)
                {
                    SqlTxtPrefiex.Append(" and t_info_title = @t_info_title");
                    tSqlItem = new SqlParameter("@t_info_title", SqlDbType.NVarChar);
                    tSqlItem.Value = tDV.t_info_title;
                    oCommand.SqlParameters.Add(tSqlItem);
                }
    
                if (tDV.t_info_title_like != null)
                {
                    SqlTxtPrefiex.Append(" and t_info_title like @t_info_title_like");
                    tSqlItem = new SqlParameter("@t_info_title_like", SqlDbType.NVarChar);
                    tSqlItem.Value = "%" + tDV.t_info_title_like + "%";
                    oCommand.SqlParameters.Add(tSqlItem);
                }
    
    
    
                SqlTxtPrefiex.Append(")");
    
                oCommand.SqlTxt = SqlTxtPrefiex.ToString() + cSqlTxtPrefiex.ToString();
    
                return cDI.GetTable(oCommand);
            }
    
            /// <summary>
            /// [返回DataTable]
            /// </summary>
            /// <param name="tDV"></param>
            /// <param name="topNum">返回行数,默认【0】全部</param>
            /// <param name="column">显示的列,默认为【*】全部</param>
            /// <param name="sqlWhere">where语句</param>
            /// <param name="order">排序,如【order by ID desc】</param>
            /// <returns></returns>
            public DataTable GetDataTable(t_infoDV tDV, int topNum, string column, string sqlWhere, string order)
            {
                if (string.IsNullOrEmpty(column))
                    column = " * ";
    
                string topNumSql = "";
                if (topNum > 0)
                    topNumSql = " top " + topNum.ToString();
    
                DataTable DT = new DataTable();
    
                mCommand oCommand = new mCommand();
    
                StringBuilder SqlTxtPrefiex = new StringBuilder(" select " + topNumSql + " " + column + " from View_t_info where 1 = 1 " + sqlWhere + " ");
                SqlParameter tSqlItem = null;
    
                if (tDV.ID != -1)
                {
                    SqlTxtPrefiex.Append(" and ID=@ID");
                    tSqlItem = new SqlParameter("@ID", SqlDbType.BigInt);
                    tSqlItem.Value = tDV.ID;
                    oCommand.SqlParameters.Add(tSqlItem);
                }
    
    
                if (tDV.t_info_title != null)
                {
                    SqlTxtPrefiex.Append(" and t_info_title = @t_info_title");
                    tSqlItem = new SqlParameter("@t_info_title", SqlDbType.NVarChar);
                    tSqlItem.Value = tDV.t_info_title;
                    oCommand.SqlParameters.Add(tSqlItem);
                }
    
                if (tDV.t_info_title_like != null)
                {
                    SqlTxtPrefiex.Append(" and t_info_title like @t_info_title_like");
                    tSqlItem = new SqlParameter("@t_info_title_like", SqlDbType.NVarChar);
                    tSqlItem.Value = "%" + tDV.t_info_title_like + "%";
                    oCommand.SqlParameters.Add(tSqlItem);
                }
    
    
    
                if (string.IsNullOrEmpty(order))
                    order = " order by ID desc ";
    
                SqlTxtPrefiex.Append(" " + order + " ");
    
    
                oCommand.SqlTxt = SqlTxtPrefiex.ToString();
    
                DT = cDI.GetTable(oCommand);
                return DT;
            }
    
    
            #endregion
    
    
        }
    }
    

      

    三、cWeb业务展示层

    cWeb业务展示层,用于业务逻辑展示的层,调用BN层的函数直接显示在web页面中。

    web层示例:

    infolist.aspx.cs代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    using System.Data;
    
    using AA.cData;
    using AA.cBN;
    using cPage;
    
    namespace AA.cWeb.manage.info
    {
        public partial class infolist : System.Web.UI.Page
        {
            cUser cu = new cUser();
    
            public int p = 1;   //页码
    
    
            protected void Page_Load(object sender, EventArgs e)
            {
                #region [判断是否登录]
                if (!cu.isLogin())
                {
                    cGlobal.frameGoUrl(this, "../../default.aspx");
                    return;
                }
                #endregion
    
                #region 分页获得页码
                string _p = Request.QueryString["p"];
    
                if (string.IsNullOrEmpty(_p))
                    _p = "1";
    
                if (cGlobal.IsIntType(_p))
                {
                    p = Convert.ToInt32(_p);
                }
                else
                {
                    cGlobal.showBoxBack(this, "页码不正确!");
                    return;
                }
                #endregion
    
                #region [判断是具有访问权限]
                if (!cDataCommon.userPagePower(cu.userID, "0202"))
                {
                    cGlobal.showBoxBack(this, "您没有权限访问!");
                    return;
                }
                #endregion
    
                #region [获得在【系统设置=》角色管理=》权限设置】中点击某一菜单后,“菜单功能权限设置”设置的功能]
                string userPageFunctionPower = cDataCommon.userPageFunctionPower(cu.userID, "0202");
                //判断是否具有“添加”功能
                if (userPageFunctionPower.IndexOf("|add|") > -1)
                    btnAdd.Visible = true;
                else
                    btnAdd.Visible = false;
                #endregion
    
                
                if (!Page.IsPostBack)
                {
    
                    dataBind();
                }
    
            }
    
            protected void dataBind()
            {
                string _url = "infolist.aspx?p=[#p#]";
                int _pageNum = 10;                              // 中间页码数量
                int _pageSize = 10;                             //每页记录数
                int _beginIndex = 0;
                int _endIndex = 0;
    
                t_infoBN tBN = new t_infoBN();
                t_infoDV tDV = new t_infoDV();
    
    
                DataTable rcDT = tBN.GetDataList(tDV, "");
    
                lblpage.Text = mPage.getPage(Convert.ToInt32(rcDT.Rows[0][0].ToString()), _pageSize, _pageNum, p, out _beginIndex, out _endIndex, _url);
    
                DataTable DT = tBN.GetDataList(tDV, "", "", _beginIndex, _endIndex, "");
    
                rlist.DataSource = DT;
                rlist.DataBind();
    
            }
            
    
            protected void rlist_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                if (e.Item.ItemIndex > -1)
                {
                    ((LinkButton)e.Item.FindControl("lnkbtnDel")).Attributes["onclick"] = "return confirm('确认要删除吗?');";
                }
            }
    
            protected void rlist_ItemCommand(object source, RepeaterCommandEventArgs e)
            {
                if (e.CommandName == "del")
                {
                    try
                    {
                        long _ID = Convert.ToInt64(((HiddenField)(e.Item.FindControl("hfID"))).Value);
    
                        t_sys_logBN tBN = new t_sys_logBN();
                        t_sys_logDV tDV = new t_sys_logDV();
    
                        tDV.ID = _ID;
    
                        string msg = "";
                        int iResult = -2;
    
                        iResult = tBN.Del(tDV, out msg);
    
    
                        if (iResult >= 0)   //0,执行完成,>1,执行完成影响的记录数
                        {
                            cGlobal.showBoxGo(this, "删除成功!", Request.Url.ToString());
                        }
                        else
                        {
                            cGlobal.showBoxBack(this, "删除失败!");
                        }
    
                    }
                    catch
                    {
                        cGlobal.showBoxBack(this, "数据格式不正确(异常)");
                    }
                }
            }
    
        }
    }
    

      

    更详细的介绍和cWeb源代码,去这里下载

    原帖地址:cWeb开发框架,基于asp.net的cWeb应用开发平台介绍(二)

    bubufx提供,禁止转载。

  • 相关阅读:
    FSBQPIDMI总线的区别
    为什么PCI-e比SATA快这么多?
    chage命令管理用户口令时效
    账户管理groupadd groupmod groupdel usermod usermod userdel
    linux 里 /etc/passwd 、/etc/shadow和/etc/group 文件内容解释
    RPM常见用法
    智力逻辑题
    Android ROM 制作教程
    智能家居项目(2):项目project框架的搭建
    5999卖999!是噱头还是颠覆
  • 原文地址:https://www.cnblogs.com/weekzero/p/3512638.html
Copyright © 2011-2022 走看看