Util
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的更多相关文章
- java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager.getManager(Ljava/lang/Class;)Lorg/apache/tomcat/util/res/StringManager
问题: 使用Springboot打包为war部署于Tomcat7中报错 java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringMa ...
- 【转】java.util.Arrays.asList 的用法
DK 1.4对java.util.Arrays.asList的定义,函数参数是Object[].所以,在1.4中asList()并不支持基本类型的数组作参数. JDK 1.5中,java.util.A ...
- Java程序日志:java.util.logging.Logger类
一.Logger 的级别 比log4j的级别详细,全部定义在java.util.logging.Level里面.各级别按降序排列如下:SEVERE(最高值)WARNINGINFOCONFIGFINEF ...
- Android中使用java.util.Properties犯的错
今天尝试使用java.util.Properties来保存应用配置,然而遇到了好几个问题,对于熟悉此内容的来说可能都是猪一样的错误,但难免有像我一样的新手再次遇到,希望此文能有所帮助. 错误1 jav ...
- java.util.ConcurrentModificationException 解决办法(转载)
今天在项目的中有一个需求,需要在一个Set类型的集合中删除满足条件的对象,这时想当然地想到直接调用Set的remove(Object o)方法将指定的对象删除即可,测试代码: public cla ...
- java util 下的concurrent包
------------------------------------------java util 下的concurrent包--------并发包--------------------.jav ...
- 原子类java.util.concurrent.atomic.*原理分析
原子类java.util.concurrent.atomic.*原理分析 在并发编程下,原子操作类的应用可以说是无处不在的.为解决线程安全的读写提供了很大的便利. 原子类保证原子的两个关键的点就是:可 ...
- 错误:java.util.Map is an interface, and JAXB can't handle interfaces.
问题: 在整合spring+cxf时报错java.util.Map is an interface, and JAXB can't handle interfaces. 解决方法: 将服务端的serv ...
- 解决springmvc报No converter found for return value of type: class java.util.ArrayList问题
一.背景 最近闲来无事,想自己搭建一套Spring+SpringMVC+Mybatis+Mysql的环境(搭建步骤会在以后博客中给出),结果运行程序时,适用@ResponseBody注解进行返回Lis ...
- Java源码之 java.util.concurrent 学习笔记01
准备花点时间看看 java.util.concurrent这个包的源代码,来提高自己对Java的认识,努力~~~ 参阅了@梧留柒的博客!边看源码,边通过前辈的博客学习! 包下的代码结构分类: 1.ja ...
随机推荐
- 在linux上创建nfs遇到的问题。
我们部署程序时,图片server是单独的一台server,有自己独立的域名.而应用部署在还有一台server上,我们使用一些附件上传工具.比方ajaxfileupload上传附件时是无法跨域訪问的. ...
- Linux 下一个 Mysql error 2002 错误解决
Linux 下一个 Mysql error 2002 错误解决 首先查看 /etc/rc.d/init.d/mysqld status 查看mysql它已开始. 假设启动的的话,先将数 ...
- node.js基础:模块的创建和引入
模块可能是一个文件,也可能是包含一个或多个文件的目录.如果模块是个目录,node.js通常会在这个目录下找一个叫index.js的文件作为模块的入口. 典型的模块是一个包含exports对象属性定义的 ...
- 在ASP.NET中使用SOAP Extensions捕获WebService异常
原文:在ASP.NET中使用SOAP Extensions捕获WebService异常 Application_Error不能捕获的异常 [WebMethod] public string Hello ...
- Python日志输出格式和时间格式
formatter = logging.Formatter("%(asctime)s %(levelname)s %(message)s","%Y%b%d-%H:%M:% ...
- 开源Math.NET基础数学类库使用(08)C#进行数值积分
原文:[原创]开源Math.NET基础数学类库使用(08)C#进行数值积分 本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4 ...
- C++指针和引用简介
摘要 本文介绍C++指针和概念引用 这是一个指针 指针的类型 指针所指向的类型 指针表达式 指针与函数 什么是引用 指针引用差别 指针和引用的同样点和不同点 **什么是指针** 指针就是一个存放地址的 ...
- FZU1669 Right-angled Triangle【毕达哥拉斯三元组】
主题链接: pid=1669">http://acm.fzu.edu.cn/problem.php?pid=1669 题目大意: 求满足以a.b为直角边,c为斜边,而且满足a + b ...
- Redis数据结构
Redis数据结构 Redis数据结构详解(一) 前言 Redis和Memcached最大的区别,Redis 除啦支持数据持久化之外,还支持更多的数据类型而不仅仅是简单key-value结构的数据 ...
- yarn环境跑mapreduce报错某个container 600s未报告进度超时被杀
问题: 发现每次reduce阶段跑到98%,相关的container被杀.报出的log大概的意思:container 600s未报告进度超时被杀 解决的方法: 在mapreduce程序里加上 conf ...