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

简介:   前情回顾:       自然框架开源社区的第一次活动——实现会员注册 (活动介绍)     自然框架开源社区第一次活动的资源包  (内含数据库设计、数据库文档、实例代码)     参与方式   (可以在这里报名参加)     人员表设计思想 —— 也许会有点帮助 (数据库的设计思路)     【自然框架】开源社区活动,会员注册的第一份代码!  (第一份代码的 原版代码)       下载“好坏”的会员注册完整代码。

 

  前情回顾:

 

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

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

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

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

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

 

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

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

 

 

  感谢“好坏”提供代码,这是我看过的比较不错的三层结构的代码了,业务层并不是直接调用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的机会,也就是提高了编写代码的效率。

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


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

 

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

 

 

 

相关文章
|
2月前
|
小程序 开发者
【社区每周】小程序商品能力两项接口变动(11月第三期)
【社区每周】小程序商品能力两项接口变动(11月第三期)
58 10
|
2月前
|
安全
外汇交易所系统开发规则玩法/步骤逻辑/方案项目/教程指南/源码流程
The development of foreign exchange system involves a series of functions and features, aiming to provide a safe, efficient, transparent, and reliable trading platform for foreign exchange trading. The following are the functions that may be involved in the development of the foreign exchange exchan
空投项目通常会附带团队邀请奖励(代币、积分)模式项目开发搭建[源码实例分析]
空投项目通常会附带团队邀请奖励(代币、积分)模式项目开发搭建[源码实例分析]
|
9月前
|
安全 区块链 数据安全/隐私保护
dapp互助预约排单二二复制/三三复制大小公排项目系统开发稳定版/玩法详情/指南教程/规则方案/需求设计/案例源码
能合约在代码中加入了许多安全校验机制,比如对输入参数范围的检查、防止重入攻击的修复等。并且智能合约在运行过程中记录每一笔交易以及合约状态的变化,确保所有的交易和状态都是经过验证和授权的,不会受到篡改。
|
9月前
|
监控 安全 数据挖掘
泰山众筹系统开发详细指南丨设计方案丨规则玩法丨逻辑功能丨步骤需求丨源码程序
泰山众筹系统是一个基于区块链技术的众筹平台,旨在为用户提供一个安全、透明和高效的众筹环境。
|
9月前
|
存储 安全 前端开发
DApp公排互助预约抢单排单模式系统开发参考版/详细流程/方案逻辑/规则玩法/案例设计/源码程序
需求分析:与团队明确系统的需求、目标和范围,包括公排互助预约抢单排单模式系统的功能、规则、奖励机制等方面
|
10月前
|
存储 前端开发 安全
什么是盲盒游戏系统开发规则丨指南教程丨功能逻辑丨需求项目丨源码方案
确定盲盒游戏的目标受众、玩法要素和游戏规则。 - 确定游戏系统的核心功能,如盲盒的获取、开启、物品收集、交易等。 - 确定技术平台和开发语言,如移动端应用的开发是选择原生开发(如iOS的Swift或Android的Java/Kotlin)还是跨平台开发(如React Native或Flutter)。
|
10月前
|
前端开发 JavaScript NoSQL
交易所系统开发详细需求/案例规则/玩法设计/步骤项目/源码教程
The development source code of the exchange system refers to the source code used to build the entire exchange system. Exchange development source code usually includes multiple parts such as front-end, back-end, and database.
|
存储 安全 小程序
东郊到家预约APP及小程序系统开发(方案及逻辑)/功能设计/项目逻辑/开发案例/成熟技术/源码程序
 区块链技术还有一个很重要的优势就是可追溯性和不可篡改性。在区块链上进行的每一笔交易都会被记录在区块链上,并且这些交易记录都是透明的,任何人都可以查看
新增闯关模式,邀请好朋友测试
计划为精致1010新增闯关模式,先把游戏原型做出来了,希望朋友们可以先行体验,并给予反馈和意见。
78 0