应用程序框架实战三十七:Util最新代码更新说明
离上一篇又过去了一个月,时间比较紧,后续估计会更紧,所以这次将放出更多公共操作类及配套的CodeSmith模板,本篇将简要介绍新放出的重要功能,供有兴趣的同学参考。
重要更新
这一次对两个VS解决方案均做了大量调整,包含项目结构及命名空间。
Util解决方案的目录截图如下。

除了少数需要配置的集成测试外,大部分单元测试已放出。

Applications项目示例的目录截图如下。

Applications项目示例虽然包含的东西不多,却建了不少项目,可能并不符合你的胃口,我将在下一篇文章向你演示其它项目结构组织方式。
CodeSmith代码生成项目的目录截图如下,这是生成前的模板,除了实体类、EF映射配置等常规代码外,我还按EASYUI的三种界面操作方式生成相关的CRUD界面,另外我也尝试生成一些测试代码,不过目前效果并不理想,大家可以先参考。

02-Result目录为生成的代码。







由于修改了项目命名空间规则,目前放出的模板命名空间有些错误,后续会进行修正。对于CodeSmith的使用,还没有学习过的同学可以先自行安装软件,我会在后续几天进行介绍。
公共操作类方面,更新了随机数生成器Util.RandomBuilder,用于生成简单的随机测试数据。
根据部分同学的建议,增加了Autofac和Ef的自动装配功能。
单元测试模拟框架已从原先的RhinoMocks改成了NSubStitute。
最近封装了缓存模块的部分功能,主要参考蘑菇先生的《那些年我们一起追过的缓存写法》以及Jusfr.W的《一步步实现一个基本的缓存模块》,我画了简单的类图和顺序图来帮助理解,目前只实现了部分功能,后续会进行完善。



为了防止缓存过期时有大量并发请求访问数据库,我使用了单元测试进行模拟,并封装了一个简单的并发模拟操作类。



本次更新了对SqlBulkCopy的封装,EF元数据通过EntityFramework.Extended扩展获取,不过遗憾的是该扩展对元数据的支持并不够理想,不支持值对象,即ComplexType,我简单修改了下,目前仅支持一级,比如user.Address,传说EF7在元数据方面开放了很多东西,后续将直接在EF7上扩展。
SqlBuilkCopy配合随机生成器,可以为简单的表快速创建测试数据,复杂的情况暂末测试。
另一个重要更新是对SQL查询的支持,通过对Dapper的简单包装即可完成查询,该模块主要实现了对SQL Where条件的拼接,自动完成空值判断,同时支持分页,目前实现了Sql Server基于RowNumber和Offset两种分页方式,Offset是Sql Server 2012特有语法,分页效率比RowNumber有大幅提升,特别是点击分页最后几页时,效果尤其明显。

EasyUi方面,更新了查找带回等功能。
功能模块方面,更新了资源管理模块,资源管理模块尚未完成,也先放出来供大家参考。
资源管理模块涉及图标选择,采用查找带回方式操作,效果图如下。


注意,使用图标管理模块上传图标时,会自动更新相关的CSS文件,由于目前该文件是静态引用,所以上传的图标在图标选择界面中无法显示,请上传后Ctrl +R刷新,后续会将引用方式改成动态,每次上传成功都需要更新CSS文件引用。
表现层引入了ValidateAntiForgeryToken特性,所有公共JS均已更新。
本次更新大量类,有兴趣自己看看,不一一介绍了。
版权申明
1. 本应用程序框架版权归作者何镇汐所有。
2. 本框架代码可免费使用,允许用于商业目的。
3. 如果您的开源项目中采用了本框架少量代码,不需要注明出处。
4. 如果您的开源项目中采用了本框架大量代码,请注明出处。
5. 严重鄙视某些人直接修改本框架命名空间后开源,本人保留追究法律责任的权利。
6. 禁止直接销售本框架源码骗钱,本人保留追究法律责任的权利。
结束语
本篇介绍了重要的更新内容,下一篇介绍VS解决方案的创建。
QQ群
应用程序框架交流QQ群1:386092459(已满)
应用程序框架交流QQ群2:376124781
EasyUi交流QQ群:157809322
源码下载:(下载时顺手推荐)
框架源码:http://files.cnblogs.com/files/xiadao521/Framework.2015.5.20.1.rar
项目示例源码:http://files.cnblogs.com/files/xiadao521/Applications.2015.5.20.1.rar
数据库备份:http://files.cnblogs.com/files/xiadao521/Data.2015.5.20.1.rar
Codesmith生成器模板:http://files.cnblogs.com/files/xiadao521/CodeGenerator.2015.5.20.1.rar
应用程序框架实战三十七:Util最新代码更新说明的更多相关文章
- 应用程序框架实战三十三:表现层及ASP.NET MVC介绍(二)
最近的更新速度越来越慢,主要是项目上比较忙,封装EasyUi也要花很多时间.不过大家请放心,本系列不会半途夭折,并且代码干货也会持续更新.本文继续介绍表现层和Asp.net Mvc,我将在本篇讨论一些 ...
- 【WePY小程序框架实战三】-组件传值
[WePY小程序框架实战一]-创建项目 [WePY小程序框架实战二]-页面结构 父子组件传值 静态传值 静态传值为父组件向子组件传递常量数据,因此只能传递String字符串类型. 父组件 (paren ...
- 应用程序框架实战三十八:项目示例VS解决方案的创建(一)
进行项目开发的第一步,是创建出适合自己团队习惯的VS解决方案,虽然我已经提供了项目示例,但毕竟是我创建的,你直接使用可能并不合适,另外你如果尝试模仿重新创建该示例,中间可能碰到各种障碍,特别是项目间的 ...
- 应用程序框架实战三十六:CRUD实战演练介绍
从本篇开始,本系列将进入实战演练阶段. 前面主要介绍了一些应用程序框架的概念和基类,本来想把所有概念介绍完,再把框架内部实现都讲完了,再进入实战,这样可以让初学者基础牢靠.不过我的精力很有限,文章进度 ...
- 应用程序框架实战三十四:数据传输对象(DTO)介绍及各类型实体比较
本文将介绍DDD分层架构中广泛使用的数据传输对象Dto,并且与领域实体Entity,查询实体QueryObject,视图实体ViewModel等几种实体进行比较. 领域实体为何不能一统江湖? 当你阅读 ...
- 应用程序框架实战三十:表现层及ASP.NET MVC介绍(一)
本文将介绍表现层及ASP.NET MVC的一些要点,特别是ASP.NET MVC的一些抽象和封装技巧,如果你对MVC还不了解,可以参考<ASP.NET MVC4 高级编程>,作者Jon G ...
- 【WePY小程序框架实战四】-使用async&await异步请求数据
[WePY小程序框架实战一]-创建项目 [WePY小程序框架实战二]-页面结构 [WePY小程序框架实战三]-组件传值 async await 是对promise的近一步优化,既解决了promise链 ...
- 应用程序框架实战十五:DDD分层架构之领域实体(验证篇)
在应用程序框架实战十四:DDD分层架构之领域实体(基础篇)一文中,我介绍了领域实体的基础,包括标识.相等性比较.输出实体状态等.本文将介绍领域实体的一个核心内容——验证,它是应用程序健壮性的基石.为了 ...
- 应用程序框架实战二十二 : DDD分层架构之仓储(层超类型基础篇)
前一篇介绍了仓储的基本概念,并谈了我对仓储的一些认识,本文将实现仓储的基本功能. 仓储代表聚合在内存中的集合,所以仓储的接口需要模拟得像一个集合.仓储中有很多操作都是可以通用的,可以把这部分操作抽取到 ...
随机推荐
- web-inf目录和meta-inf目录
/WEB-INF/web.xml Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则. /WEB-INF/classes/ 包含了站点所有用的 class 文件,包括 se ...
- HDU1401 BFS
Solitaire Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- jquery ui 中的插件开发
1 $.widget() 必须引用 <script src=")" type="text/javascript"></script> ...
- Jquery、简单的下拉列表、网页左部导航菜单
简单的下拉菜单.左部导航使用. 2016-5-13 记 效果图如下: <!DOCTYPE html> <html lang="en"> <head&g ...
- 360急速浏览器BUG,POST表单提交参数丢失
p{text-indent:2em;} --> 今天我在做支付宝充值的时候发现在360急速浏览器下面业务处理页面获取Request.Form参数为空,一开始我还以为是自己参数没有传递过去.然后就 ...
- VIM配置
Linux下的编辑器以vim和emacs为主流,一个编辑器之神,一个是神的编辑器. 本文以主要介绍如何在linux下以vim为基础搭建一个比较顺手的代码编辑器. 有两种比较流行的方式: 自动安装 手动 ...
- UnderScore源代码阅读1
读一下underscore源代码,用于自己学习,个人理解,如果有不对的地方希望指正,谢谢 我觉着阅读的顺序按照从整体到局部,从架构到细节较好. 1.整体架构 (function() {}.call(t ...
- html 5 实现拖放效果
在html5中要实现拖放操作,相对于以前通过鼠标操作实现,要简单得多,数据安全性也更有保障.只需要以下几步即可. 给被拖拽元素添加draggable属性,如果是文件拖放. 在拖拽元素的dragstar ...
- sessionStorage/localStorage 本地存储
if(!sessionStorage.getItem('vote2')||sessionStorage.getItem('vote2')==NaN)sessionStorage.setItem(' ...
- 【二】jekyll 的使用
本系列有五篇:分别是 [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面 [二]jekyll 的使用 :主要是jekyll的配置 [三]Markdown+ ...