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

 

  前情回顾:

 

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

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

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

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

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

 

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

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

 

 

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

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

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

 

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

 

 

 

时间: 2024-10-22 22:16:28

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

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

  前情回顾:   自然框架开源社区的第一次活动--实现会员注册     人员表设计思想 -- 也许会有点帮助     自然框架开发系列(一):自然框架 和 AgileEAS.NET 合作,开发b/s的药店系统!   漫长的期待,终于等来了第一份代码,这份代码由"好坏"提供.十分感谢对活动的支持!他工作也很忙,经常加班,昨天是他第一次不用加班,晚上写到凌晨3点多,10点起来又写到现在才写完.我也是刚刚收到这份代码,简单的看了一下.   项目是按照三层的方式来编写,分成了五个项目.  

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

  活动方式 由社区提出一个需求,大家按照自己的习惯.方式来实现这个需求,然后上传代码.上传后其他人都可以看到,并且可以提出自己的看法.上传人可以根据大家的看法修改代码,再次上传. 可以查看.学习别人上传的代码,进行讨论.发表自己的看法.找一个大家都有空的时间(暂定4月24日),集中讨论.可以用语音群聊的方式.   活动目的 上传.介绍自己的代码,学习别人的代码,通过讨论,取长补短,达到共同提高的目的. 活动时间 4月1日到4月23:大家上传自己的实现代码.同时也可以进行讨论. 4月24日:集中

自然框架开源社区,如何开展活动

  大家真给力呀,一上午的时间,第一个群就满了,幸好"雪狼"又提供了一个群(113983952).但是群再多也架不住大家的热情,所以要加快建立自然框架开源社区的网站的进度了,在这个网站里大家可以做很多很多的事情了.以下是初步的打算.   1.可以注册会员. 2.会员可以填写个人信息,填写自己擅长的领域.技术等.便于大家的相互了解. 3.管理员可以发布任务.可以发布通知. 4.会员可以领取任务,按照要求完成任务. 5.对代码进行讨论. 6.其他.   以上功能,我会用自然框架快速搭建起来

【自然框架】之鼠标点功能现(二):表单控件的“应用”—— 代码?只写需要的!

    [自然框架]之鼠标点功能现(一):单表的增删改查(即上次5月23日活动的一个主题)[Demo.源码下载]           看了大家的回复,好像不少人误会了,我为了突出"鼠标点,功能现",所以没有说代码,没有贴代码,这就让一些人认为我想要完全抛弃VS,自己写一个"平台"来代替,不好意思,您高估我了,我可达不到.我只是想"简单的事情点鼠标就可以了,复杂的事情就要写代码了".         还是举例子吧.比如说上次里的[表8:添加列表信息

【自然框架】数据访问之精雕细琢(一)存储过程的参数

  目标: 对存储过程的参数进行封装,达到方便操作.更换数据库不需要改代码的目的. 特点:1. 调用方便2. 没有数据库特征. 正文: 现在参数化SQL语句越来越常用了,这就涉及到如何写存储过程的参数的问题.您也许会问,这有啥的直接写不就可以了么?就像下面这段代码.   string sql = "insert into OS_User_Info values(@UserID,@PersonID,@NikeName,@ProvinceID,@CityID,@CountyID,@Introduct

【自然框架】表单控件 之 一个表单修改多个表里的记录

        FormView 确实挺方便的,不过他也有几个小问题,只把FormView拖到页面里是不行的,还得再拽几个文本框.下拉列表框这一类的控件,还得布局.然后还要弄一个DataSource的控件,利用这个控件把文本框等控件和字段对应上,DataSource也有一个致命的缺点,默认情况下,他是把SQL语句以属性的形式放在了.aspx页面里面.我把SQL语句放在.aspx.cs里面,都被大家反对,那么DataSource把SQL语句放在了aspx里面,大家怎么就可以接受了呢?如果用Form

【自然框架】QuickPager分页控件的单独的源码 V2.0.4.2。

   QuickPager的源码分离出来之后由两个项目组成,一个是QuickPager.另一个是QuickPagerSQL.分页控件的演示也独立了出来.   如图1 .   QuickPager是分页控件的项目,负责UI的绘制,即上一页.下一页.页号导航等的绘制,还有事件的触发,控件绑定等功能. QuickPagerSQL是生产分页用的SQL的项目,这个也是独立的,可以单独调用这个dll. QuickPager项目里引用的DLL: 1. Nature.CommonFunction 这里除了常用函

把业务逻辑变成数据结构和SQL语句的例子。自然架构改成自然框架

      更正:和大家交流了一下,发现现在就叫做架构有一点大,还是叫做框架更准确一些,就叫做自然框架吧.     目前自然框架的内容包括三个部分:使用自定义控件快速实现增删改查和导出Excel.通用权限.个性化设置.       上一篇里 球球 同学询问"不太明白需求是怎么转化为数据库的.比如一个最简单的会员例子,累计1万消费以上是一级会员,5000消费以上是2级会员,买商品属于1级会员的8折,属于2级会员的9折,这个业务逻辑要怎么转化成数据库?"那我就以这个作为例子说一下吧.  

自然框架开源社区,欢迎您的加入!

  一直都在说开源,也一直把自然框架的源码拿出来提供下载,但是好像感兴趣的人不多,回复并不热烈.也许是代码比较烂,也许是没有帮助文档,也许是demo做的不够好没有突出特点.   所以还是从基础做起,这一段时间我在整理我的思路,整理自然框架的源码,同时编写帮助文档.现在我的思路更加明确了一些,帮助文档也正在编写(http://help.naturefw.com/),希望这次能够得到更多的反馈信息.   ============================   一个人的能力是有限的,要在团队中才