您的位置:首页 > 运维架构 > 网站架构

从零开始实现一个电子商务网站----编码实现之N层类目结构(七)

2010-08-03 23:38 375 查看
编码实现之N层类目结构
在解决了碰到的问题后,编码变的异常简单。但依然耗时很长,与开发之初决定使用快速原型法来获取需求有很大的差距。现在这种开发情况更像增量法。无论现在使用的什么方法,我们都能看到胜利的光芒,因为这是个能实现的系统。我们需要实现的关键对象为:Category类--------对应于UML类图中的类目Commodity类--------商品CommodityImage类--------商品细节图片ContactAddress类--------联系地址CustCommodity类--------可选某些特征的商品CustCommodityAttribute类--------商品特征Customer类--------顾客DiscountMessage类--------促销信息Message类--------信息Order类--------订单OrderItem类--------订单细节ShoppingCart类--------购物车ShoppingItem类--------购买项User类--------用户这些类的大部分功能都是更新某项属性或向数据库添加记录或向数据库中查询记录(这些代码我将会把它们发布出来)下面就来聊聊几个关键方法的设计:N层类目机制:如何体现出Category类中类目层次结构,我们知道类目是用来对商品进行分类的,一般会有多层。例如: ------------第二层类目 第一层类目----------------第二层类目 -----------------第三层类目 ------------第二层类目-----------------第三层类目 -----------------第三层类目 当然如果你的商品分类不多的话,你完全可以将他们硬性设计为两层或三层结构。但如果以后要向在现有的类目层次上再添加几层的话将会变的十分的困难。在我们的这个系统中我们将实现一个能描述N层类目结构的机制。我们来看看数据库中Category表的情况:



子目录的CategoryId字段指向父目录的Id字段,以这样的方式传递下去,最终形成类目树的结构。要实现这种N层类目结构的机制有三个关键步骤:步骤一:类目数据录入的时候要严格按照类目树的结构进行录入,否则插入的数据会成为孤立数据。步骤二:如何将这种逻辑上体现出的树形类目结构实际的呈现出来。步骤三:如何来维护这种N层类目机制。 我们做到步骤一并不难,关键在于怎么设计步骤二。步骤二的实现代码(涉及Category类中的属性与方法在后面以经列出):
生成后的类目树如下:

 有这个类目树,我们就能根据它来设计出供顾客浏览且具有友好界面的类目了。 步骤三:维护涉及的过程无非就是添加,更新,删除。添加在步骤一已经解决了,现在我们来看看更新和删除怎么办。更新:  如果想将某一类目的父类目更新为其他的类目,只需更新这一个类目,而不需要更新其的子孙类目。删除:  如果要删除某一类目,则必须将在该类目下的所有子孙类目都删除。删除过程的实现代码为:
  public static bool DelCategory(Guid id)
        {
          int result = 0;
            StringBuilder delCmd;
            StringBuilder strBuilder = new StringBuilder();
            Stack<Category> stack = new Stack<Category>();
            Category temp;
            stack.Push(new Category(id));
            strBuilder.Append("(");
            while (true)
            {
                if (stack.Count == 0)
                    break;
                temp=stack.Pop();
                strBuilder.AppendFormat("'{0}',", temp.ID.ToString());
                foreach (Category c in temp.ChildCategories)
                {
                    stack.Push(c);
                }
            }
            strBuilder.AppendFormat("'{0}')", id.ToString());//再添加一次,省的等下用字符拼接来去掉最后一个逗号
            
            delCmd = new StringBuilder();
            delCmd.AppendFormat("delete from Category where Id in {0}", strBuilder.ToString());
            SqlConnection conn = new SqlConnection(MAMAWEBSYSTEM.CONNECTIONSTRING);
            SqlTransaction tran;
            SqlCommand cmd = new SqlCommand(delCmd.ToString(), conn);

            conn.Open();
            tran = conn.BeginTransaction();
            cmd.Transaction = tran;
            try
            {
                result = cmd.ExecuteNonQuery();
            }
            catch
            {
                tran.Rollback();
            }
            tran.Commit();
            conn.Close();
            return result == 0 ? false : true;
 }
解决上面三个步骤后,我们的N层类目机制也初具形态了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: