zoukankan      html  css  js  c++  java
  • 一步一步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
  • 相关阅读:
    Do You See Me? Ethical Considerations of the Homeless
    ELDER HOMELESSNESS WHY IS THIS AN ISSUE?
    Endoflife support is lacking for homeless people
    html内联框架
    html字体
    html块 div span
    html列表
    html表格
    SQL Server管理员专用连接的使用   作为一名DBA,经常会处理一些比较棘手的服务无响应问题,鉴于事态的严重性,多数DBA可能直接用“重启”大法,以便尽快的恢复生产环境的正常运转,但是多数情况
    如何配置最大工作线程数 (SQL Server Management Studio)
  • 原文地址:https://www.cnblogs.com/mysweet/p/2537519.html
Copyright © 2011-2022 走看看