【自然框架】注册会员活动——第一份代码的修改建议(第一版)

 

  前情回顾:

 

    自然框架开源社区的第一次活动——实现会员注册 (活动介绍)

    自然框架开源社区第一次活动的资源包  (内含数据库设计、数据库文档、实例代码)

    参与方式   (可以在这里报名参加)

    人员表设计思想 —— 也许会有点帮助 (数据库的设计思路)

    【自然框架】开源社区活动,会员注册的第一份代码!  (第一份代码的 原版代码)

 

    下载“好坏”的会员注册完整代码。(“好坏”提供的原始版代码)

    下载我的修改后的代码(第一版)  (第一版修改稿)

 

 

  感谢“好坏”提供代码,这是我看过的比较不错的三层结构的代码了,业务层并不是直接调用DAL,而是有其自身的逻辑判断,并不是传声筒,很赞。

我对这份代码,按照自己的理解进行了下面几个修改:

  1. 规范命名
  2. 实体类的属性的定义写法
  3. 修改添加数据的方式

 

规范命名


  我以前写代码也不注意命名规范,跟着感觉走,也养成了不好的习惯。靠自觉是不行了,只好用点强制的手段了,呵呵。使用 ReSharper 进行规范,尽量按照他的要求来改。
  为什么说是尽量,而不是全部呢?比如他要求 Page_Load 要改成 PageLoad,即去掉中间的下划线。这个是vs2008(包括以前的版本,vs2010没注意)默认的方式,这个就很冲突了,要不要改呢?目前还是按照vs的习惯来,没有修改。

  用  ReSharper 来强制一下,命名上也好统一,也好查找不规范的地方,比较省事了。

 

实体类的属性的定义的写法

 

  比较绕口,呵呵。

  原来的写法是中规中矩的,先定义一个内部成员,然后定义一个属性,属性里只有简单的get、set,没有任何的限制。这种情况就可以改成“动态属性”,ReSharper也是建议这样。所以就把它改成动态属性的写法了。当然这个没有对错之分。

 

///   <summary>
///  社区信息ID
///   </summary>
public   int  OSUserID {  get set ; }

 

  另一个就是加注释的方法,这样加注释,在调用的时候,可以显示出来提示信息,这样便于调用。当然还需要做一个设置才行(如下图)。设置后再次编译,bin目录里会出现.xml的文件,提示信息就放在这里面。

生成帮助提示

 


添加修改数据的方式


  原版用的是SQLHelp。感谢“好坏”的苦心,因为他们实际中用的是微软的企业库,但是他感觉直接用ado.net 效果更好,所以他自己弄了一个SQLHelp,使用这种方式来写代码,这样大家看着就更明确。
  使用SQLHelp简单易懂,这是优点,但是也存在很多的缺点。

1、 如果要更换数据库,那么就要改代码。
2、 不易读。
3、 用着不方便。
4、 增加出现bug的机会。

 

  我们先看看看SQLHelp的调用方式:

 

string  sql  =   " insert into OS_User_Info values(@UserID,@PersonID,@NikeName,@ProvinceID,@CityID,@CountyID,@Introductions,@RegisterDate) " ;
            SqlParameter paramUserID 
=   new  SqlParameter( " @UserID " , SqlDbType.Int);
            paramUserID.Value 
=  osuser.UserID;
            SqlParameter paramPersonID 
=   new  SqlParameter( " @PersonID " , SqlDbType.Int);
            paramPersonID.Value 
=  osuser.PersonID;
            SqlParameter paramNikeName 
=   new  SqlParameter( " @NikeName " , SqlDbType.NVarChar);
            paramNikeName.Value 
=  osuser.NikeName;
            SqlParameter paramProvinceID 
=   new  SqlParameter( " @ProvinceID " , SqlDbType.Int);
            paramProvinceID.Value 
=  osuser.ProvinceID;
            SqlParameter paramCityID 
=   new  SqlParameter( " @CityID " , SqlDbType.Int);
            paramCityID.Value 
=  osuser.CityID;
            SqlParameter paramCountyID 
=   new  SqlParameter( " @CountyID " , SqlDbType.Int);
            paramCountyID.Value 
=  osuser.CountyID;
            SqlParameter paramIntroductions 
=   new  SqlParameter( " @Introductions " , SqlDbType.NText);
            paramIntroductions.Value 
=  osuser.Introductions;
            SqlParameter paramRegisterDate 
=   new  SqlParameter( " @RegisterDate " , SqlDbType.DateTime);
            paramRegisterDate.Value 
=  osuser.RegisterDate;

            
int  row  =  Sql_Helper.ExecuteSql(sql, paramUserID, paramPersonID, paramNikeName,
                                            paramProvinceID, paramCityID, paramCountyID,
                                            paramIntroductions, paramRegisterDate);
            
if  (row  ==   0 )
                
return   false ;
            
            
int  id  =  SelectNewID( " OS_User_Info " );
            osuser.OSUserID 
=  id;
            
return   true ;

 

 

  然后在对比一下使用自然框架的数据访问的调用方式。

 

ManagerParameter parm  =  da.ManagerParameter;

            parm.ClearParameter();
            parm.AddNewInParameter(
" UserID " , osuser.UserID);
            parm.AddNewInParameter(
" PersonID " , osuser.PersonID);
            parm.AddNewInParameter(
" NikeName " ,osuser.NikeName, 40  );
            parm.AddNewInParameter(
" ProvinceID " ,osuser.ProvinceID );
            parm.AddNewInParameter(
" CityID " , osuser.CityID);
            parm.AddNewInParameter(
" CountyID " , osuser.CountyID);
            parm.AddNewInParameter(
" Introductions " ,osuser.Introductions );   // ntext类型,不设置长度。
            parm.AddNewInParameter( " RegisterDate " , osuser.RegisterDate);
            

            
// 添加数据
             string  newID  =  da.ModifyData.InsertData( " OS_User_Info " );

            
if  (da.ExecuteRowCount  ==   0 )
                
return   false ;

            osuser.OSUserID 
=   int .Parse(newID);

            
return   true ;

 

 

  看一下修改后的代码,如果数据库更换了,这段代码是不需要修改的。因为他不含有特点数据库的“影子”。

  1、存储过程的参数名前面并没有加 “@”,因为不是所有的数据库都用“@”。

  2、没有使用SqlDbType来设定参数类型,因为他带有SqlClient的影子。
  3、没有写参数化的SQL,这样减少出现bug的机会,字段名如果有变化,也减少了修改点。

  4、因为根本就没有写SQL,所以也就不会出错,不用修改。

  那么SQL呢?在ModifyData.InsertData内部,通过存储过程参数和传递过去的表名,拼接出来的。你可能会说,拼接字符串会有性能损失。这个我承认,但是带来的优点是易读、易修改、减少出现bug的机会,也就是提高了编写代码的效率。

  我认为这是值得的,当然你也可以认为这是不值得的,因为可以用代码生成器。呵呵,每个人都有自己的看法、自己的理解。这里是我的理解,你可以反对。引用一句名言“我不同意你的观点,但是我誓死捍卫你说话的权力”呵呵。


  第一版就修改这些,既然是第一版,那么就是说还会有第二版,第三版……。代码需要大家的点评,需要不断改进,这样我们就一步一步成长起来,也是这次活动的目的。

 

  欢迎大家提出自己的修改建议,也欢迎大家参加这个活动!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值