• 一步一步asp.net_删除模块设计


    删除使我们经常性碰到的模块,无处不在删除,但是删除在业务中是非常重要的,因为一般删除涉及到数据库,图片,等等,往往关联多个数据库,甚至是分布式服务器,数据库,图片服务器图片的删除,所以保持事务的一致性,是非常重要的,比如下图:

    image

    在这个简单的业务中,涉及到删除到图片删除的模块:

    大师(大师有一个logo主图片),

    大师荣誉证书(n张),

    企业(企业logo一张图片),

    企业美景图(用于展示企业空间tab轮转切换)

    企业荣誉证书(n张荣誉证书)

    产品(主图片一张)

    产品副图片(n张)

    图片的尺寸一般分为三种,大中小三种型号,用于缓解服务器鸭梨,很多地方都加在小图片

    这时候,我们要做删除功能必须做数据库删除和图片删除两个,而且必须保证事务的一致性,也就是说,先删除数据库,如果数据库删除成功才去删除图片.

    但是这又有一个问题:

              如果先删除数据库,图片信息已经删除了,怎么删除图片?

    这时候,需要我们预先保存要删除的图片,然后,在执行数据库删除,如果数据库删除成功,在进行图片的删除.

    但是又有一个问题,删除图片,涉及大量的删除,如果我们写死在一块,就会造成一个模块出现大量的代码,这就加大了复杂程度.

    特别是类别删除,一个类别删除,首先要删除,大师类别,企业类别,如果删除大师/企业类别,又必须删除相应的大师和企业,如果删除相应的大师和企业,又必须删除,大师和企业对应的产品,如果删除产品又要删除产品对应的收藏夹,购物车等等,再加上图片删除,可以想象,一个删除功能最少上千行代码,我们就应该把删除功能抽取出来,实现软件复用.

    我们采用三层构架,这时候作用非常明显了,我们的DAL层专门处理数据库删除,不去关心怎

    么删除图片问题,图片的删除是业务逻辑层需要解决的问题,因此,我们可以实现,整个网站先

    不做删除,最后一起做,这样,职责清晰明了.

    这就是产品删除层次图:

    image

    这是数据库DAL层删除

    但是如果是普通的删除方法,比如,删除类别,然后根据类别id去查找大师或者企业,然后根据大师或者企业类别去查找产品等等,这势必会导致指数级的sql语句,这时候我们需要做sql优化,优化的地方在哪里呢?

      我们根据类别查找出大师的企业,这时候,对应多个企业和大师,但是,都有很多产品,我们再根据产品去删除产品其他信息,尽量保证在O(n)这个级别的sql,尽量不要出现sql在循环中,那样势必造成无数个连接.

    然后删除就是一个纯体力活,不断的写删除,不过主要是思维要清晰,要保证事务,是非常重要的.

    crafttype删除:

       1:       #region 删除
       2:          #region 获得属于该类别的大师的删除语句
       3:          /// <summary>
       4:          /// 获得属于该类别的大师的删除语句
       5:          /// </summary>
       6:          /// <param name="Id"></param>
       7:          /// <returns></returns>
       8:          internal string GetDeleteMastersSql(string Id)
       9:          {
      10:              string sql = "select Masterid from master_type where  Typeid=" + Id;
      11:              DataTable dt = SqlHelper.ExecuteDataTable(sql);
      12:              StringBuilder sb = new StringBuilder();
      13:              masterDAL dal = new masterDAL();
      14:              foreach (DataRow dr in dt.Rows)
      15:              {
      16:                  sb.Append(dal.GetMasterDeleteSql(Convert.ToInt32(dr["Masterid"])));
      17:              }
      18:              return sb.ToString();
      19:          } 
      20:          #endregion
      21:          #region 获得属于该类别的企业的删除语句
      22:          /// <summary>
      23:          /// 获得属于该类别的企业的删除语句
      24:          /// </summary>
      25:          /// <param name="Id"></param>
      26:          /// <returns></returns>
      27:          internal string GetDeleteCompanySql(string Id)
      28:          {
      29:              string sql = "select Companyid from company_type where  Typeid=" + Id;
      30:              DataTable dt = SqlHelper.ExecuteDataTable(sql);
      31:              StringBuilder sb = new StringBuilder();
      32:              companyDAL dal = new companyDAL();
      33:              foreach (DataRow dr in dt.Rows)
      34:              {
      35:                  sb.Append(dal.GetCompanyDeleteSql(Convert.ToInt32(dr["Companyid"])));
      36:              }
      37:              return sb.ToString();
      38:          } 
      39:          #endregion
      40:          #region 获得属于多个类别的大师的删除语句
      41:          /// <summary>
      42:          /// 获得属于多个类别的大师的删除语句
      43:          /// </summary>
      44:          /// <param name="Id"></param>
      45:          /// <returns></returns>
      46:          internal string GetDeleteMoreMastersSql(string Ids)
      47:          {
      48:              string sql = "select Masterid from master_type where  Typeid in (" + Ids + ")";
      49:              DataTable dt = SqlHelper.ExecuteDataTable(sql);
      50:              StringBuilder sb = new StringBuilder();
      51:              masterDAL dal = new masterDAL();
      52:              foreach (DataRow dr in dt.Rows)
      53:              {
      54:                  sb.Append(dal.GetMasterDeleteSql(Convert.ToInt32(dr["Masterid"])));
      55:              }
      56:              return sb.ToString();
      57:          }
      58:          #endregion
      59:          #region 获得属于多个类别的企业的删除语句
      60:          /// <summary>
      61:          /// 获得属于多个类别的企业的删除语句
      62:          /// </summary>
      63:          /// <param name="Id"></param>
      64:          /// <returns></returns>
      65:          internal string GetDeleteMoreCompanySql(string Ids)
      66:          {
      67:              string sql = "select Companyid from company_type where  Typeid in (" + Ids + ")";
      68:              DataTable dt = SqlHelper.ExecuteDataTable(sql);
      69:              StringBuilder sb = new StringBuilder();
      70:              companyDAL dal = new companyDAL();
      71:              foreach (DataRow dr in dt.Rows)
      72:              {
      73:                  sb.Append(dal.GetCompanyDeleteSql(Convert.ToInt32(dr["Companyid"])));
      74:              }
      75:              return sb.ToString();
      76:          }
      77:          #endregion
      78:          #region 删除crafttype
      79:          /// <summary>
      80:          /// 删除crafttype
      81:          /// </summary>
      82:          /// <param name="id">id</param>
      83:          /// <returns>执行状态</returns>
      84:          public bool Delete(int id)
      85:          {
      86:              StringBuilder sb = new StringBuilder();
      87:              // 获取删除企业的sql语句
      88:              sb.Append(GetDeleteCompanySql(id.ToString ()));
      89:              //获取删除大师的sql语句
      90:              sb.Append(GetDeleteMastersSql(id.ToString ()));
      91:              sb.Append("delete from craftknowledge where Typeid=" + id);
      92:              sb.Append("delete from crafttype where id=" + id);
      93:              bool status = false;
      94:              SqlHelper.Open();
      95:              SqlHelper.BeginTrans();
      96:              if (SqlHelper.ExecuteNonQuery(sb.ToString()))
      97:              {
      98:                  status = true;
      99:                  SqlHelper.CommitTrans();
     100:              }
     101:              else
     102:              {
     103:                  status = false;
     104:                  SqlHelper.RollbackTrans();
     105:              }
     106:   
     107:              return status;
     108:          } 
     109:          #endregion
     110:          #region 删除crafttype(多选)
     111:          /// <summary>
     112:          /// 删除crafttype(多选)
     113:          /// </summary>
     114:          /// <param name="strID">strID,记得多个用,隔开</param>
     115:          /// <returns>执行状态</returns>
     116:          public bool DeleteMoreID(string strID)
     117:          {
     118:              bool status = false;
     119:              string[] IDs = strID.Split(',');
     120:              StringBuilder sb = new StringBuilder();
     121:              sb.Append(GetDeleteMoreMastersSql(strID));
     122:              sb.Append(GetDeleteMoreCompanySql(strID));
     123:              for (int i = 0; i < IDs.Length; i++)
     124:              {
     125:               sb.Append(";delete from craftknowledge where  Typeid=" + IDs[i]);
     126:              }
     127:              sb.Append(";delete from crafttype where id in (" + strID + ")");
     128:              SqlHelper.Open();
     129:              SqlHelper.BeginTrans();
     130:              if (SqlHelper.ExecuteNonQuery(sb.ToString()))
     131:              {
     132:                  status = true;
     133:                  SqlHelper.CommitTrans();
     134:              }
     135:              else
     136:              {
     137:                  status = false;
     138:                  SqlHelper.RollbackTrans();
     139:              }
     140:   
     141:              return status;
     142:           
     143:          } 
     144:          #endregion
     145:          #endregion
     146:      }

    crafttype调用的master和company中构造删除的sql,master和company又迭代的构造删除product的sql,

    这样就能节省很多工作,性能也有了较大的提高.

    构造company删除:

       1:          #region 删除
       2:         /// <summary>
       3:         /// 删除company的sql语句生成
       4:         /// </summary>
       5:         /// <param name="id"></param>
       6:         /// <returns></returns>
       7:          internal string GetCompanyDeleteSql(int id)
       8:          {
       9:              string sql = "select Id from product where  Companyid=" + id;
      10:              DataTable dt = SqlHelper.ExecuteDataTable(sql);
      11:              StringBuilder sb = new StringBuilder();
      12:              productDAL dal = new productDAL();
      13:              foreach (DataRow dr in dt.Rows)
      14:              {
      15:                  sb.Append(dal.GetDeleteProductSqlString(dr["Id"].ToString()));
      16:              }
      17:              sb.Append(";delete from company_pic where Companyid=" + id);
      18:              sb.Append(";delete from company_cert where  Companyid=" + id);
      19:              sb.Append(";delete from company_type where  Companyid=" + id);
      20:              sb.Append(";delete from company where Id="+id+";");
      21:              return sb.ToString(); 
      22:          }

    构造大师删除sql:

       1:   
       2:          /// <summary>
       3:          /// 删除master的sql语句生成
       4:          /// </summary>
       5:          /// <param name="id"></param>
       6:          /// <returns></returns>
       7:          internal string GetMasterDeleteSql(int id)
       8:          {
       9:              string sql = "select Id from product where Belongstype='0' and Masterid=" + id;
      10:              DataTable dt = SqlHelper.ExecuteDataTable(sql);
      11:              StringBuilder sb = new StringBuilder();
      12:              productDAL dal = new productDAL();
      13:              foreach (DataRow dr in dt.Rows)
      14:              {
      15:                  //获取删除产品所有信息的SQL(构造出sql)
      16:                  sb.Append(dal.GetDeleteProductSqlString(dr["Id"].ToString()));
      17:              }
      18:              sb.Append(";delete from master_cert where  Masterid=" + id);
      19:              sb.Append(";delete from master_type where  Masterid=" + id);
      20:              sb.Append(";delete from master where Id=" + id + ";");
      21:              return sb.ToString();
      22:          }

    构造产品删除:

       1:          #region 获取删除产品的前置sql语句
       2:          /// <summary>
       3:          /// 获取删除产品的前置sql语句
       4:          /// </summary>
       5:          /// <param name="ProductId"></param>
       6:          /// <returns></returns>
       7:          internal string GetDeleteProductSqlString(string ProductId)
       8:          {
       9:              string sql = string.Format("delete from MemberCollection where ProductId={0};delete from ShoppingCart where ProductId={0};delete from comment where Productid={0};delete from product_picturepath where Productid={0}; delete from product where id={0};", ProductId);
      10:              return sql;
      11:          } 
      12:          #endregion

    这就是关于类别的删除,太复杂了,乱七八糟,需要思路清晰.

    不过总体都是DAL层的删除工作,接下来就是图片删除:

    图片删除,首先要构造一个删除类,专门负责删除图片(大中小),一个负责获取图片路径

       1:  using System;
       2:  using System.Collections.Generic;
       3:  using System.Linq;
       4:  using System.Text;
       5:  using System.Configuration;
       6:  namespace Common
       7:  {
       8:      /// <summary>
       9:      /// 潮州工艺品图片删除
      10:      /// </summary>
      11:     public  class CzcraftDeletePic
      12:      {
      13:         public enum DeletePicType
      14:         {
      15:             /// <summary>
      16:             /// 大师图片
      17:             /// </summary>
      18:             GetMasterPic=0,
      19:             /// <summary>
      20:             /// 大师荣誉图片
      21:             /// </summary>
      22:             GetMasterCert=1,
      23:             /// <summary>
      24:             /// 企业荣誉图片
      25:             /// </summary>
      26:             GetCompanyCert=2,
      27:             /// <summary>
      28:             /// 企业主图片
      29:             /// </summary>
      30:             GetLogoCompanyPic=3,
      31:             /// <summary>
      32:             /// 企业美景图
      33:             /// </summary>
      34:             GetCompanyPic=4,
      35:             /// <summary>
      36:             /// 产品主图片
      37:             /// </summary>
      38:             GetMainProductPic=5,
      39:             /// <summary>
      40:             /// 产品副图片
      41:             /// </summary>
      42:             GetOtherProductPic=6
      43:         }
      44:         /// <summary>
      45:          /// 潮州工艺品图片删除
      46:         /// </summary>
      47:          /// <param name="FileType">文件类别(GetMasterPic,GetMasterCert,GetCompanyCert,GetLogoCompanyPic,GetMainProductPic,GetOtherProductPic)</param>
      48:         /// <param name="FileName">文件名</param>
      49:         public static void FileDelete(DeletePicType FileType, string FileName)
      50:         {
      51:            string VirtualPath= GetPicPath(FileType, FileName);
      52:             //删除文件
      53:            FileOperate.FileDelete(VirtualPath, true);
      54:         }
      55:         /// <summary>
      56:         /// 获取文件路径(根据文件类别)
      57:         /// </summary>
      58:         /// <param name="FileType">文件类别</param>
      59:         /// <param name="FileName">文件名</param>
      60:         /// <returns></returns>
      61:         public static string GetPicPath(DeletePicType FileType, string FileName)
      62:         {
      63:             string PicServerPath = ConfigurationManager.AppSettings["PicServerPath"];
      64:             string VirtualFilePath = PicServerPath;
      65:             switch (FileType)
      66:             { 
      67:                 case DeletePicType.GetMasterPic:
      68:                     VirtualFilePath += "Master/MainMasterPic/";
      69:                     break;
      70:                 case DeletePicType.GetMasterCert:
      71:                     VirtualFilePath += "Master/MasterCert/";
      72:                     break;
      73:                 case DeletePicType.GetCompanyCert:
      74:                     VirtualFilePath += "Company/CompanyCert/";
      75:                     break;
      76:                 case DeletePicType.GetCompanyPic:
      77:                     VirtualFilePath += "Company/MainCompanyPic/";
      78:                     break;
      79:                 case DeletePicType.GetLogoCompanyPic:
      80:                     VirtualFilePath += "Company/CompanyPic/";
      81:                     break;
      82:                 case DeletePicType.GetMainProductPic:
      83:                     VirtualFilePath += "Product/MainProductPic/";
      84:                     break;
      85:                 case DeletePicType.GetOtherProductPic:
      86:                     VirtualFilePath += "Product/OtherProductPic/"; ;
      87:                     break;
      88:                 default:
      89:                  throw new Exception("文件类别输入有误!");
      90:                  
      91:   
      92:   
      93:             }
      94:             VirtualFilePath += FileName;
      95:             return VirtualFilePath;
      96:         }
      97:      }
      98:  }

    图片的路径写在webconfig中,接下来就是业务逻辑方面的删除,

    我们要保证先从数据库中查出图片,然后删除数据库,最后删除图片.

    这个业务逻辑层就复杂得多了.

    同样是类别删除:

       1:        #region 删除
       2:         #region 删除crafttype
       3:         /// <summary>
       4:         /// 删除crafttype
       5:         /// </summary>
       6:         /// <param name="id">id</param>
       7:         /// <returns>执行状态</returns>
       8:         public bool Delete(int id)
       9:         {
      10:             #region 大师图片信息保存
      11:             //获取大师主Id信息
      12:             DataTable dtMasterIds = new masterDAL().GetAllMasterByCraftType(id.ToString());
      13:             StringBuilder MasterIds = new StringBuilder();
      14:             foreach (DataRow dr in dtMasterIds.Rows)
      15:             {
      16:                 MasterIds.Append(dr["Masterid"].ToString());
      17:             }
      18:             MasterIds.Remove(MasterIds.Length - 1, 1);
      19:             //大师多个id
      20:             string strMasterIds = MasterIds.ToString();
      21:             //获取大师主图片
      22:             DataTable dtMasterPath = new masterDAL().GetMasterMainPic(strMasterIds);
      23:             //获取大师荣誉图片
      24:             DataTable dtMasterCert = new master_certDAL().GetMoreMasterCertPath(strMasterIds);
      25:             //获取大师产品图片
      26:             DataTable dtMasterProducts = new productDAL().GetProductsPicByMoreMasterIds(strMasterIds);
      27:             //获取大师其他产品图片
      28:             StringBuilder ProductIds = new StringBuilder();
      29:             foreach (DataRow dr in dtMasterProducts.Rows)
      30:             {
      31:                 ProductIds.Append(dr["Id"].ToString());
      32:             }
      33:             ProductIds.Remove(ProductIds.Length - 1, 1);
      34:             DataTable dtProductOtherProducts = new product_picturepathDAL().GetMoreOtherProductPicPath(ProductIds.ToString());
      35:             #endregion
      36:             #region 企业图片信息保存
      37:             //获取企业主Id信息
      38:             DataTable dtCompanyIds = new companyDAL().GetAllCompanyByCraftType(id.ToString());
      39:             StringBuilder CompanyIds = new StringBuilder();
      40:             foreach (DataRow dr in dtCompanyIds.Rows)
      41:             {
      42:                 CompanyIds.Append(dr["Masterid"].ToString());
      43:             }
      44:             CompanyIds.Remove(CompanyIds.Length - 1, 1);
      45:             //企业多个id
      46:             string strCompanyIds = CompanyIds.ToString();
      47:             //获取企业主图片
      48:             DataTable dtCompanyPath = new companyDAL().GetCompanyMainPic(strCompanyIds);
      49:             //获取企业美景图
      50:             DataTable dtCompanyPic = new company_picDAL().GetCompanyPicByMoreCompanyIds(strCompanyIds);
      51:             //获取企业荣誉图片
      52:             DataTable dtCompanyCert = new company_certDAL().GetMoreCompanyCertPath(strCompanyIds);
      53:             //获取企业产品图片
      54:             DataTable dtCompanyProducts = new productDAL().GetProductsPicByMoreCompanyIds(strCompanyIds);
      55:             //获取企业其他产品图片
      56:             StringBuilder CompanyProductIds = new StringBuilder();
      57:             foreach (DataRow dr in dtCompanyProducts.Rows)
      58:             {
      59:                 CompanyProductIds.Append(dr["Id"].ToString());
      60:             }
      61:             CompanyProductIds.Remove(CompanyProductIds.Length - 1, 1);
      62:             DataTable dtCompanyOtherProducts = new product_picturepathDAL().GetMoreOtherProductPicPath(ProductIds.ToString());
      63:             #endregion
      64:             //删除
      65:             crafttypeDAL dal = new crafttypeDAL();
      66:             bool Status = dal.Delete(id);
      67:             //如果执行成功,则删除图片
      68:             masterBLL bll = new masterBLL();
      69:             companyBLL companyBll = new companyBLL();
      70:             if (Status)
      71:             {
      72:                 #region 大师图片删除
      73:                 //删除大师主图片
      74:                 bll.DeleteMainMasterPath(dtMasterPath);
      75:   
      76:                 //删除大师荣誉证书
      77:   
      78:                 bll.DeleteMasterCertPic(dtMasterCert);
      79:                 //删除所有产品图片
      80:   
      81:                 bll.DeleteProdoctsByMasterId(dtMasterProducts);
      82:                 //删除产品其他图片
      83:                 new product_picturepathBLL().DeleteMoreOtherProductPic(dtProductOtherProducts);
      84:                 #endregion
      85:                 #region 企业图片删除
      86:                 //删除企业主图片
      87:                 companyBll.DeleteMainCompanyPath(dtCompanyPath);
      88:                 //删除企业美景图
      89:                 companyBll.DeleteCompanyPic(dtCompanyPic);
      90:   
      91:                 //删除多个企业荣誉图片
      92:   
      93:                 companyBll.DeleteCompanyCertPic(dtCompanyCert);
      94:                 //删除所有产品图片
      95:   
      96:                 companyBll.DeleteProdoctsByCompanyId(dtCompanyProducts);
      97:                 //删除产品其他图片
      98:                 new product_picturepathBLL().DeleteMoreOtherProductPic(dtCompanyOtherProducts);
      99:                 #endregion
     100:   
     101:             }
     102:             return Status;
     103:   
     104:         } 
     105:         #endregion
     106:         #region 删除crafttype
     107:         /// <summary>
     108:         /// 删除crafttype
     109:         /// </summary>
     110:         /// <param name="strID">strID,记得多个用,隔开</param>
     111:         /// <returns>执行状态</returns>
     112:         public bool DeleteMoreID(string strID)
     113:         {
     114:             #region 大师图片信息保存
     115:             //获取大师主Id信息
     116:             DataTable dtMasterIds = new masterDAL().GetAllMasterByCraftType(strID);
     117:             StringBuilder MasterIds = new StringBuilder();
     118:             foreach (DataRow dr in dtMasterIds.Rows)
     119:             {
     120:                 MasterIds.Append(dr["Masterid"].ToString());
     121:             }
     122:             MasterIds.Remove(MasterIds.Length - 1, 1);
     123:             //大师多个id
     124:             string strMasterIds = MasterIds.ToString();
     125:             //获取大师主图片
     126:             DataTable dtMasterPath = new masterDAL().GetMasterMainPic(strMasterIds);
     127:             //获取大师荣誉图片
     128:             DataTable dtMasterCert = new master_certDAL().GetMoreMasterCertPath(strMasterIds);
     129:             //获取大师产品图片
     130:             DataTable dtMasterProducts = new productDAL().GetProductsPicByMoreMasterIds(strMasterIds);
     131:             //获取大师其他产品图片
     132:             StringBuilder ProductIds = new StringBuilder();
     133:             foreach (DataRow dr in dtMasterProducts.Rows)
     134:             {
     135:                 ProductIds.Append(dr["Id"].ToString());
     136:             }
     137:             ProductIds.Remove(ProductIds.Length - 1, 1);
     138:             DataTable dtProductOtherProducts = new product_picturepathDAL().GetMoreOtherProductPicPath(ProductIds.ToString());
     139:             #endregion
     140:             #region 企业图片信息保存
     141:             //获取企业主Id信息
     142:             DataTable dtCompanyIds = new companyDAL().GetAllCompanyByCraftType(strID);
     143:             StringBuilder CompanyIds = new StringBuilder();
     144:             foreach (DataRow dr in dtCompanyIds.Rows)
     145:             {
     146:                 CompanyIds.Append(dr["Masterid"].ToString());
     147:             }
     148:             CompanyIds.Remove(CompanyIds.Length - 1, 1);
     149:             //企业多个id
     150:             string strCompanyIds = CompanyIds.ToString();
     151:             //获取企业主图片
     152:             DataTable dtCompanyPath = new companyDAL().GetCompanyMainPic(strCompanyIds);
     153:             //获取企业美景图
     154:             DataTable dtCompanyPic = new company_picDAL().GetCompanyPicByMoreCompanyIds(strCompanyIds);
     155:             //获取企业荣誉图片
     156:             DataTable dtCompanyCert = new company_certDAL().GetMoreCompanyCertPath(strCompanyIds);
     157:             //获取企业产品图片
     158:             DataTable dtCompanyProducts = new productDAL().GetProductsPicByMoreCompanyIds(strCompanyIds);
     159:             //获取企业其他产品图片
     160:             StringBuilder CompanyProductIds = new StringBuilder();
     161:             foreach (DataRow dr in dtCompanyProducts.Rows)
     162:             {
     163:                 CompanyProductIds.Append(dr["Id"].ToString());
     164:             }
     165:             CompanyProductIds.Remove(CompanyProductIds.Length - 1, 1);
     166:             DataTable dtCompanyOtherProducts = new product_picturepathDAL().GetMoreOtherProductPicPath(ProductIds.ToString());
     167:             #endregion
     168:             //删除
     169:             crafttypeDAL dal = new crafttypeDAL();
     170:             bool Status = dal.DeleteMoreID(strID);
     171:             //如果执行成功,则删除图片
     172:             masterBLL bll = new masterBLL();
     173:             companyBLL companyBll = new companyBLL();
     174:             if (Status)
     175:             {
     176:                 #region 大师图片删除
     177:                 //删除大师主图片
     178:                 bll.DeleteMainMasterPath(dtMasterPath);
     179:   
     180:                 //删除大师荣誉证书
     181:   
     182:                 bll.DeleteMasterCertPic(dtMasterCert);
     183:                 //删除所有产品图片
     184:   
     185:                 bll.DeleteProdoctsByMasterId(dtMasterProducts);
     186:                 //删除产品其他图片
     187:                 new product_picturepathBLL().DeleteMoreOtherProductPic(dtProductOtherProducts);
     188:                 #endregion
     189:                 #region 企业图片删除
     190:                 //删除企业主图片
     191:                 companyBll.DeleteMainCompanyPath(dtCompanyPath);
     192:                 //删除企业美景图
     193:                 companyBll.DeleteCompanyPic(dtCompanyPic);
     194:   
     195:                 //删除多个企业荣誉图片
     196:   
     197:                 companyBll.DeleteCompanyCertPic(dtCompanyCert);
     198:                 //删除所有产品图片
     199:   
     200:                 companyBll.DeleteProdoctsByCompanyId(dtCompanyProducts);
     201:                 //删除产品其他图片
     202:                 new product_picturepathBLL().DeleteMoreOtherProductPic(dtCompanyOtherProducts);
     203:                 #endregion
     204:   
     205:             }
     206:             return Status;
     207:         } 
     208:         #endregion
     209:          #endregion
     210:      }

    然后具体细节的删除就更多了.这里就不一一概述了....可以发现其实一个删除都挺复杂了......不过由于三层的因素简化了太多太多了,以前的一个类别删除,我也不知道要删除多少东西..........

    总之,记住一句话,DAL负责数据库交互,BLL负责业务逻辑,这样才能让项目思路更清晰,更容易维护!

    当然,我感觉现在这个逻辑也还是乱乱的,不过已经清晰太多了,至少,把DAL个部分职责分的非常清晰!

    我的superui开源后台bootstrap开发框架github地址:https://github.com/tzhsweet/superui
  • 相关阅读:
    go语言goroutine
    go语言接口
    go语言的map
    go语言切片
    go语言数组
    django的信号机制
    python redis 实现简单的消息订阅
    scrapy中使用selenium来爬取页面
    尝试用tornado部署django
    控制台输出太多导致项目启动过慢
  • 原文地址:https://www.cnblogs.com/mysweet/p/2537519.html
Copyright © 2020-2023  润新知