SubSonic3.0 Demo1.0——应用了T4模版可减少开发过程中70%以上的代码量以及80%以上的出错率
应网友的要求,抽了点时间写了这个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%以上的出错率的更多相关文章
- 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 解决方 ...
- NX11.0和VS2013 创建NXOpen 开发模版失败解决方案【转载】
转载自PLM之家论坛 NX11.0和VS2013 创建NXOpen 开发模版失败解决方案 首先我觉得这个可能是西门子疏忽,基本上每个大版本没有补丁前都有类似问题,下面来说说怎么解决吧.注意这里版本,N ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(29)-T4模版
系列目录 本节不再适合本系统,在58,59节已经重构.请超过本节 这讲适合所有的MVC程序 很荣幸,我们的系统有了体验的地址了.演示地址 之前我们发布了一个简单的代码生成器,其原理就是读取数据库的表结 ...
- EF架构~在T4模版中为所有属性加默认值
回到目录 在项目开发过程中,出现了一个问题,就是新添加一个非空字段后,原来的程序逻辑需要被重新修改,即将原来的字段添加到程序里,这种作法是非常不提倡的,所以,我通过T4模版将原来的实体类小作修改,解决 ...
- EF架构~在T4模版中自定义属性的getter和setter
回到目录 T4模版为我们在ORM操作上提供了便捷,它很方便的可以对实体进行全局性的修改,之前我介绍过通过T4来为属性加默认性,而今天我主要告诉大家如何使用T4模版将getter,setter块改为自己 ...
- T4教程1 T4模版引擎之基础入门
T4模版引擎之基础入门 额,T4好陌生的名字,和NuGet一样很悲催,不为世人所熟知,却又在背后默默无闻的奉献着,直到现在我们项目组的人除了我之外,其它人还是对其豪无兴趣,基本上是连看一眼都懒得看 ...
- T4教程2 T4模版引擎之生成数据库实体类
T4模版引擎之生成数据库实体类 在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实战篇.T4模板引擎可以当做一个代码生成器,代码生成器的职责当然是用来生成代码(这不是废话吗).而这其中 ...
- 黄聪:VS2010开发T4模版引擎之基础入门
原文:http://www.cnblogs.com/lzrabbit/archive/2012/07/15/2591085.html 额,T4好陌生的名字,和NuGet一样很悲催,不为世人所熟知,却又 ...
- [转]T4模版引擎之生成数据库实体类
本文转自:http://www.cnblogs.com/lzrabbit/archive/2012/07/18/2597953.html 在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实 ...
随机推荐
- 第2章 新手必须掌握的Linux命令
第2章 新手必须掌握的Linux命令 章节简述: 本章节讲述系统内核.Bash解释器的关系与作用,教给读者如何正确的执行Linux命令以及常见排错方法. 经验丰富的运维人员可以恰当的组合命令与参数 ...
- 反编译apk时遇到的问题
第一次尝试反编译的时候遇到如下问题:Input file (ganzhou) was not found or was not readable 百度之后说是apktool版本2.0以上,编译命令变了 ...
- grep 信息提取
1.提取svn版本库的版本号 svn info |grep -Po '(?<=Revision: )[0-9]*'
- 可变字符串NSMutableString
//可变字符串继承自字符串 //拼接 NSMutableString *string = [NSMutableString string]; [string appendString:@"今 ...
- 字符串转换为数字---使用java7的装箱功能
以前转换只知道使用Xxx.prasexxx方法,原来,还可以直接装箱自动转换. //String类型字符串 String intStr = "123"; int str2int1 ...
- java-通过JDBC操作数据库
一.加载驱动 这里我们用Class.forname();来加载驱动,用此语句会提示排除异常. Class.forName("com.mysql.jdbc.Driver"); 括号中 ...
- *HDU1846HDU2188 巴什博奕
Brave Game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- SQL编程篇 (二) 定义与流程控制
分类: sql编程:标准的sql 编程 * 纯sql 在标准的编程中又分为 sqlserver-->T-sql oracle-->pl-sql(扩展) 变量:在使用变量之前先定义 声明变量 ...
- The Myths about Transactions (ACID) and NoSQL
There has been widespread characterization of one of the major distinctions between NoSQL and tradit ...
- java多线程系类:JUC原子类:01之框架
本系列内容全部来自于http://www.cnblogs.com/skywang12345/p/3514589.html 特在此说明!!!!! 根据修改的数据类型,可以将JUC包中的原子操作类可以分为 ...