编程之道

无论是批评的,赞扬的,指着的都请EMAIL给我,你的建议将是我前进的动力! 联系我

毕业设计,基于3层的.net论坛设计思路

    这个项目我在分析设计的时候采用了3层构架。我的基本思想是只要和数据库交互的字段和控件,我都把它当作参数传给中间层,然后中间层调用数据层的runCommand()方法,从而达到了各层分工明细的目的。在验证表单方面,我使用了JS,在客户端验证,可以减低服务器压力。
下面是一段注册用户的代码:
 

//register.cs

//通过一个提交事件,将控件值传入业务层

private void Submit_ServerClick(object sender, System.EventArgs e)

{

         UserInfo user=new UserInfo();                    
         user.AddUser(this.UserName.Value,this.PasswordR.Value,this.Email.Value,this.Homepage.Value,

                                     this.show_face.Src);

}

//UserInfo.cs                                

public void AddUser(string username,string passwords,string email,

         string homepage,string face)

{

         Database data = new Database();

         OleDbParameter[] prams={                       

                                                        data.MakeInParam("@username",OleDbType.VarChar,16),

                                                        data.MakeInParam("@passwords",OleDbType.VarChar,12),

                                                         data.MakeInParam("@email",OleDbType.VarChar,50),

                                                       data.MakeInParam("@homepage",OleDbType.VarChar,50),

                                                       data.MakeInParam("@face",OleDbType.VarChar,50)

                                                    };

    //SQL语句                        

         strcmd="insert into Users(username,passwords,email,homepage,face) values (@username, @passwords, @email, @homepage, @face)";

         //将传入的参数放进数组里          

         string[] values={username,passwords, email, homepage, face};

    //将数据库相对应每个字段的变量放进数组

         string[] datacolumn={"@username","@passwords", "@email", "@homepage", "@face"};

    //调用数据层的runCommand()方法

         data.runCommand(strcmd,prams,datacolumn,values);      

}

//Database.cs

//返回一个OleDbParameter对象

public OleDbParameter MakeInParam(string ParamName, OleDbType DbType,int size)

{

         OleDbParameter param;

         return param=new OleDbParameter(ParamName,DbType,size);

}

 

public void runCommand(string strcmd,OleDbParameter[] prams,string[] datacolumn,string[] values)

{

         OleDbDataAdapter cmd = new OleDbDataAdapter(strcmd, conn);    

    this.Open();

         if (prams != null)

         {

        //2个循环主要是为了创建

        // cmd.SelectCommand.Parameters.Add(new OleDbParameter ("@username",OleDbType.VarChar,16));

//赋值

// cmd.SelectCommand.Parameters[@username].Value=username;

//我这样设计主要是为了考虑如果以后要添加或删除用户信息的话,

//我只要修改业务层

                   foreach (OleDbParameter parameter in prams)

                   {

                            cmd.SelectCommand.Parameters.Add(parameter);                                       

                   }

                   for(int i=0;i<values.Length;i++)

                   {

                            cmd.SelectCommand.Parameters[datacolumn[i]].Value=values[i];

                   }

         }                

         cmd.SelectCommand.ExecuteNonQuery();

         this.Close();                       

}


      完成项目后,我发现了很多问题,试着想去改,怕破坏原来的结构,总的来说还是失败了,我总结了以下经验和问题:
1.在多表操作的时候应该使用存储过程,因为句子一长很容易错,而且调试后才能知道结果,如果是存储过程的话可以在MSSQL中验证语句是否错误。当然存储过程还有其他优点。
2.用JS脚本验证表单。我觉得比.NET提供的验证控件方便多了,而且本地验证减少网络传输中这样那样的问题。
3.我有次在别人机子上调试的出了问题:老是报:“该操作不是一个可更新的操作。”我郁闷了好久,最后在别人帖子了找到了答案,原来是WINDOWS权限问题,那机子用的是WINDOWS2003。
4.我觉得象我这样普通的毕业生,软件工程对我来说太渺茫了,根本就没法达到自己预期的理想,就算是分析时设计到的功能,但在代码实现时被自己设计的框架而卡住。所以我就有个疑问:是拿别人的设计书写好,还是自己设计自己写好?虽然我时常偷窥某人设计书,但是终不得精髓。(就像有了内功新法确缺少套路一样)
5.戒骄戒躁。我觉得骄傲烦躁这是编程大忌。林锐博士一本书写到他同学编程的时候,说他编程的时候简直不是人,就是个指针。可能这就是高手和普通人的区别把

posted on 2005-08-20 22:40 疯流成性 阅读(1140) 评论(1)  编辑  收藏 所属分类: 项目

评论

# re: 毕业设计,基于3层的.net论坛设计思路 2006-08-06 02:54 XYZ

写的好
  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: