应网友的要求,抽了点时间写了这个Demo,希望对2.2版想升级到3.0的朋友或正在使用3.0的朋友有所帮助。大家在使用Demo过程中如果发现什么问题或有什么建议,可以直接将Bug提交给我或告诉我,我会抽时间进行处理的,如果支持我写的文章,也请登陆我的博客推荐一下,有你的支持,我会更有动力。

  本Demo使用了T4模版,可以通过模版的应用达到快速开发目的,在我实际的项目当中,可减少70%以上的代码量(计算方面的代码都放在了逻辑层,而逻辑层代码绝大部分都是直接生成)以及80%以上的出错率(程序员平常最多的出错是在机械式的复制与粘贴操作后产生的视觉疲劳,由于没有将复制后的所有相关名称进行修改引起的错误)

  ================================================================

  名    称:SubSonic3.0 Demo
  版    本:1.0
  最后更新:2013-9-13

  作    者:Empty(AllEmpty)
  Email:   1654937@qq.com
  学习讨论:SubSonic3.0学习群(327360708)
  相关博客:http://www.cnblogs.com/EmptyFS/

  ================================================================

  开发环境:
  Vs2010 + SubSonic3.0.0.4.2 + ExtAspNet3.1.9.2

本Demo只是简单的实现了登陆、管理员表的查询以及管理员记录的添加、删除、修改、改变状态功能
底层使用SubSonic3.0.0.4.2插件 + T4模版生成
逻辑层使用T4模版生成将开发过程中所需要的各种调用函数,在实际项目中,使用本方式开发的框架,代码开发量减少了70%以上,出错率也将减到最低。程序员只需要简单的复制+粘贴,然后修改一些UI就可以完成网站后台管理系统或企业类管理软件的功能开发,只需要在小部分需要使用一些逻辑处理的页面中实现一些逻辑处理就可以了,大大减轻了项目开发的工作量,提高开发效率。

本Demo只是实现了简单的功能,并没有详细将管理系统的各种功能实现出来,只是通过本Demo提供了一种快速开发的思想,大家可以深入研究后自由发挥各自的想象与需要,去实现出来。

Demo中各级目录与文件的说明,请查看附件中的数据字典,里面有详细的说明。

项目中的Text.aspx.cs文件是SubSonic3.0的各种使用例子,如果大家对SubSonic3.0不熟悉的话,可以将它设为启动项,启动DeBug调试方法,逐行调试查看,就知道怎么使用了,里面包含了插件各种常用的调用方式。

另外还要重点说明一下的是DataAccess/SubSonic/EntityTable.tt生成的EntityTable.cs文件,这个文件直接生成数据表名与及相关字段名,可直接使用DataAccess.DataModel.T + Table(如ManagerTable.TableName可获取表名...)获取数据表名称与各个字段名称,使用这种方式可以减少代码中的硬编码,这样在修改数据库字段或内容时,VS就会直接报错,让我们可以马上知道要修改那几个地方,减少出错的可能。

Login项目中的SubSonic/CreateBll.tt模版主要用于生成各种逻辑类,在<#
   foreach(var col in tbl.Columns){
    if (col.SysType == "byte")
    {
#>

<#
    }
   }
#>   
  #endregion 模版生成函数

如图:

之间放的是根据字段名标识不同,对应生成不同的方法。

生成后的逻辑类内容,如图

  大家在实现使用中,可以通过定义不同的字段名给程序甄别而生成你所需要的函数,这样就会大大减轻开发中的工作量,另外使用生成功能,可以避免开发过程中,由于机械式的复制与粘贴产生的视觉疲劳,没有修改相关名称引起的错误。由于生成的逻辑类使用了partial这个类修饰符,所以我们还可以定义同名的逻辑类,里面放那些不能用模版来生成的方法,这样生成与自定义的方法分开两个文件处理,就不用有修改后要花大量时间进行复制粘贴修改相关类了。

  最后需要指出的是SubSonic3.0插件目前不支持括号嵌套功能,有双层括号时会给解释成多个单括号,甚至出错,所以大家添加查询条件时要注意这一点,等以后有时间再研究一下代码,看能否加上括号嵌套功能。还有使用In查询时,插件也不能很好的进行解释,所以我封装了ConditionHelper.cs条件类,将In查询转换为多个Or关系的等于查询语句,在使用时也有一些讲究的,具体请查看Test.aspx.cs中的例子。

  下载地址:http://yunpan.cn/QGFA6U8p8cz4M   密码:e701

  下载地址于2013-09-13 15:56重新更新了,修改了查询条件封装类(SqlqueryCondition.cs)的一个小Bug

  本文章为原创内容,转载请保留下面信息。

  发表本编内容,只要主为了和大家共同学习共同进步,有兴趣的朋友可以加加Q群:SubSonic3.0学习群(327360708)或Email给我(1654937#qq.com),大家一起探讨,由于本人工作很繁忙,如果疑问请先留言,回复不及时也请谅解。

  想了解更多SubSonic3.0的相关问题,请观注博客:http://www.cnblogs.com/EmptyFS/

SubSonic3.0 Demo1.0——应用了T4模版可减少开发过程中70%以上的代码量以及80%以上的出错率的更多相关文章

  1. no main manifest attribute, in demo-1.0.jar

    今天想打包一个jar到Linux上运行,发现使用java -jar demo-1.0.jar 运行报错: no main manifest attribute, in demo-1.0.jar 解决方 ...

  2. NX11.0和VS2013 创建NXOpen 开发模版失败解决方案【转载】

    转载自PLM之家论坛 NX11.0和VS2013 创建NXOpen 开发模版失败解决方案 首先我觉得这个可能是西门子疏忽,基本上每个大版本没有补丁前都有类似问题,下面来说说怎么解决吧.注意这里版本,N ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(29)-T4模版

    系列目录 本节不再适合本系统,在58,59节已经重构.请超过本节 这讲适合所有的MVC程序 很荣幸,我们的系统有了体验的地址了.演示地址 之前我们发布了一个简单的代码生成器,其原理就是读取数据库的表结 ...

  4. EF架构~在T4模版中为所有属性加默认值

    回到目录 在项目开发过程中,出现了一个问题,就是新添加一个非空字段后,原来的程序逻辑需要被重新修改,即将原来的字段添加到程序里,这种作法是非常不提倡的,所以,我通过T4模版将原来的实体类小作修改,解决 ...

  5. EF架构~在T4模版中自定义属性的getter和setter

    回到目录 T4模版为我们在ORM操作上提供了便捷,它很方便的可以对实体进行全局性的修改,之前我介绍过通过T4来为属性加默认性,而今天我主要告诉大家如何使用T4模版将getter,setter块改为自己 ...

  6. T4教程1 T4模版引擎之基础入门

    T4模版引擎之基础入门   额,T4好陌生的名字,和NuGet一样很悲催,不为世人所熟知,却又在背后默默无闻的奉献着,直到现在我们项目组的人除了我之外,其它人还是对其豪无兴趣,基本上是连看一眼都懒得看 ...

  7. T4教程2 T4模版引擎之生成数据库实体类

    T4模版引擎之生成数据库实体类   在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实战篇.T4模板引擎可以当做一个代码生成器,代码生成器的职责当然是用来生成代码(这不是废话吗).而这其中 ...

  8. 黄聪:VS2010开发T4模版引擎之基础入门

    原文:http://www.cnblogs.com/lzrabbit/archive/2012/07/15/2591085.html 额,T4好陌生的名字,和NuGet一样很悲催,不为世人所熟知,却又 ...

  9. [转]T4模版引擎之生成数据库实体类

    本文转自:http://www.cnblogs.com/lzrabbit/archive/2012/07/18/2597953.html 在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实 ...

随机推荐

  1. JMF框架

    Java媒体框架(JMF)使你能够编写出功能强大的多媒体程序,却不用关心底层复杂的实现细节.JMF  API的使用相对比较简单,但是能够满足几乎所有多媒体编程的需求.在这篇文章中,我将向你介绍如何用很 ...

  2. 反射 Class类和Class实例

  3. 6个奇葩的(hello,world)C语言版(转)

    //下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C++的编译器用才能编译通过. //程序功能输出   Hello,world! 01.c #define _________ } #de ...

  4. Android进程间通讯之messenger

    这两天在看binder,无意间在文档看到messenger这么个东西,感觉这个东西还挺有意思的,给大家分享一下. 平时一说进程间通讯,大家都会想到AIDL,其实messenger和AIDL作用一样,都 ...

  5. HOJ 1797 Red and Black

    传送门  http://acm.hit.edu.cn/hoj/problem/view?id=1797 总体的思路是遍历可以到达的' . ',将其对应的vis数组化为1,然后统计所有为1的vis项; ...

  6. 疯狂C#~伴随着我的库存管理¥

    每次的等待都是期待下一次的勃发!但激进的我非常想和大家学习一些东西,所以特地的分享了一个库存管理, 生活中容易运用的很多,但现在的学业希望能够得到各界人士的帮助!!! 首先:会有几个类来让它们协调 ( ...

  7. ES6(五) 数组扩展

    Array.of方法用于将一组值,转换为数组.  Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES ...

  8. Android Studio编码问题

    Android Studio编码问题 不同于Eclipse,选中项目右击即会出现"Properties"选项,可以设置项目文件的默认编码,可以根据自己的需要设置为UTF-8/GB2 ...

  9. “眉毛导航”——SiteMapPath控件的使用(ASP.NET)

    今天做网站的时候,用到了SiteMapPath控件,我把使用方法记录下来,以便日后查阅以及帮助新手朋友们. SiteMapPath”会显示一个导航路径(也称为痕迹导航或眉毛导航),此路径为用户显示当前 ...

  10. jQuery中设置form表单中action值与js有什么不同。。。。

    jQuery中设置form表单中action值与js有什么不同.... HTML代码如下: <form action="" method="post" i ...