Fork me on GitHub
摘要: 以前在用easyui的时候,每个页面都得从0做起,或者不厌其烦地由以前的页面通过“复制-粘贴”的方式来修改,久页久之,就会造成页面庞大且难以维护。其实,前端的html,javascript代码与后端的代码是一样的,通过一定的组织,把重复的代码抽离出来,同样也通过达到很好的复用率。而MVC的天生的Layout布局与分布视图(Partial View),就是对重复代码抽离的需求有很好的支持。多动脑,多总结,前端的代码也同样能像后台C#代码一样重构,重构到极致。 阅读全文
posted @ 2015-01-09 21:43 郭明锋 阅读(19240) 评论(32) 推荐(52) 编辑
摘要: OSharp是一个依赖于EntityFramework,专注于业务数据模型与EntityFramework解耦的适用于中小型项目开发的(插件式)框架。OSharp将支持基于OSGi.NET的插件式开发,但我们还是会从非插件式讲起,详细了解OSharp开发框架的方方面面。在本系列中,将会讲解到不少非常实用的技术与编码技巧,欢迎关注。 阅读全文
posted @ 2015-01-08 21:34 郭明锋 阅读(45106) 评论(106) 推荐(323) 编辑
摘要: 本文主要探讨了一种基于ASP.NET MVC3 Razor的模块化(Plugin)/插件(plugin)式架构的实现方法。本文借鉴了《Compile your asp.net mvc Razor views into a seperate dll》作者提供的方法。敬请注意。其实ASP.NET MVC的模块化(Plugin)/插件(plugin)式架构讨论的很多,但基于Razor视图引擎的很少(如:MVC2插件架构例子都是基于WebForm的,MVCContribPortable Areas也是,还有这个Plugin架构)。要么就是非常复杂非常重量级的框架,例如Orchard CMS的模块化.. 阅读全文
posted @ 2013-09-02 15:00 郭明锋 阅读(3544) 评论(0) 推荐(10) 编辑
摘要: 前言 最近在整理EntityFramework数据更新的代码,颇有体会,觉得有分享的价值,于是记录下来,让需要的人少走些弯路也是好的。 为方便起见,先创建一个控制台工程,使用using(var db = new DataContext)的形式来一步一步讲解EF数据更新的可能会遇到的问题及对应的解... 阅读全文
posted @ 2013-09-01 02:01 郭明锋 阅读(30744) 评论(51) 推荐(146) 编辑
摘要: 前言 今天我们来谈谈EF的缓存问题。 缓存对于一个系统来说至关重要,但是是EF到版本6了仍然没有见到有支持查询结果缓存机制的迹象。EF4开始会把查询语句编译成存储过程缓存在Sql Server中,据说EF6中对此做了改进,会把Linq To Entities 的查询条件直接编译缓存在EF中。但是... 阅读全文
posted @ 2013-07-12 22:07 郭明锋 阅读(17993) 评论(46) 推荐(56) 编辑
摘要: 前言 首先对大家表示抱歉,这个系列已经将近一个月没有更新了,相信大家等本篇更新都等得快失望了。实在没办法,由于本人水平有限,写篇博客基本上要大半天的时间,最近实在是抽不出这么长段的空闲时间来写。另外也是一直没想好本篇应该怎样写比较容易理解,于是就一天一天的拖着了。废话不多说,言归正传。 EF的C... 阅读全文
posted @ 2013-07-11 00:41 郭明锋 阅读(26282) 评论(84) 推荐(151) 编辑
摘要: 前言 经过前面EF的《第一篇》与《第二篇》,我们的数据层功能已经较为完善了,但有不少代码相似度较高,比如负责实体映射的 EntityConfiguration,负责仓储操作的IEntityRepository与EntityRepository。而且每添加一个实体类型,就要手动去添加一套相应的代码,也 阅读全文
posted @ 2013-06-16 18:30 郭明锋 阅读(24600) 评论(50) 推荐(60) 编辑
摘要: 前言 经过EF的《第一篇》,我们已经把数据访问层基本搭建起来了,但并没有涉及实体关系。实体关系对于一个数据库系统来说至关重要,而且EF的各个实体之间的联系,实体之间的协作,联合查询等也都依赖于这些实体关系。实体映射 实体与数据库的映射可以通过DataAnnotation与FluentAPI两种方... 阅读全文
posted @ 2013-06-15 10:55 郭明锋 阅读(24789) 评论(42) 推荐(68) 编辑
摘要: 〇、目录一、前言二、设计思路三、核心代码分析四、如何使用(以EntityFramework为例) (一) 在项目中建立专属文件夹 (二) 在文件夹内实现数据操作的基础准备 (三) 继承TesterBase实现自己的Tester类 (四) 添加测试调用入口 (五) 运行测试五、写在后面六、源码下载一、前言 首先,鉴于本文所展现的ORM耗时测试已成为了博友的吐嘈点,我想我有必要声明一点:我发布这个测试框架,相当于一个活动,目的是收集各种数据访问解决方案的实现示例,并在性能,易用性,代码量上做一个综合的对比,让大家更好的了解各个解决方案的优缺点,选择的时候更明确。时间的对比只是其中一个方... 阅读全文
posted @ 2013-06-07 23:25 郭明锋 阅读(7200) 评论(59) 推荐(22) 编辑
摘要: 前言 终于到EF了,实在不好意思,最近有点忙,本篇离上一篇发布已经一个多星期了,工作中的小迭代告一段落,终于有点时间来继续我们的架构设计了,在这里先对大家表示歉意。 其实这段时间我并不是把这个系列给忘记了,而是一直在思考,想着接下来应该怎么写。因为园子里已经有很多非常优秀的EF的文章了,比如:E... 阅读全文
posted @ 2013-05-28 16:34 郭明锋 阅读(54629) 评论(154) 推荐(214) 编辑
摘要: 前言 在《上篇》中,基本的项目结构已经搭建起来了,但是有个问题,层与层之间虽然使用了接口进行隔离,但实例化接口的时候,还引入了接口实现类的依赖。如下图: 面向接口编程,Controller应该只依赖于站点业务层的接口,而不能依赖于具体的实现,否则,就违背了在层之间设置接口的初衷了。 另外,如果... 阅读全文
posted @ 2013-05-21 22:38 郭明锋 阅读(25162) 评论(55) 推荐(68) 编辑
摘要: 前言 在《上篇》中,已经把项目整体结构规划做了个大概的规划。在本文中,将使用代码的方式来一一解说各个层次。由于要搭建一个基本完整的结构,可能文章会比较长。另外,本系列主要出于实用的目的,因而并不会严格按照传统的三层那样进行非常明确的层次职能划分。需求说明 在本系列中,为方便大家理解,将以一个账户... 阅读全文
posted @ 2013-05-20 19:12 郭明锋 阅读(49004) 评论(119) 推荐(223) 编辑
摘要: 系列导航MVC实用架构设计(〇)——总体设计MVC实用架构设计(一)——项目结构搭建MVC实用架构设计(二)——使用MEF应用IOCMVC实用架构设计(三)——EF-Code First(1):Repository,UnitOfWork,DbContextMVC实用架构设计(三)——EF-Code ... 阅读全文
posted @ 2013-05-19 23:13 郭明锋 阅读(51075) 评论(64) 推荐(367) 编辑
摘要: 前言 上文书(基于VS2012 Fakes框架的TDD实战——接口模拟)把接口模拟的部分演示完了,接口模拟也是Mock框架最基本的功能了吧,比如很易用的Moq框架,就非常容易模拟出接口中定义的操作返回的结果。 Moq也有局限性,比如不能模拟密封类,不能直接模拟静态方法等,而这些需求在微软VS20... 阅读全文
posted @ 2012-08-26 17:38 郭明锋 阅读(6788) 评论(4) 推荐(18) 编辑
摘要: 前言 最近团队要尝试TDD(测试驱动开发)的实践,很多人习惯了先代码后测试的流程,对于TDD总心存恐惧,认为没有代码的情况下写测试代码时被架空了,没法写下来,其实,根据个人实践经验,TDD并不可怕,还很可爱,只要你真正去实践了几十个测试用例之后,你会爱上这种开发方式的。微软对于TDD的开发方式是大... 阅读全文
posted @ 2012-08-25 20:36 郭明锋 阅读(13323) 评论(21) 推荐(48) 编辑
摘要: 发了本系列的前三遍几天后,收到了若风云同学的站内信,说如果Expression中包含Guid类型属性的查询时,会报异常,亲自验证了下,确实会有问题。原因是Dynamic Expression API 与 ExpressionSerialization 对Guid的支持不是很好。下面就来解决这个问题。首先,给我们的DataContract(Member类)增加一个Guid类型的属性UserCode,同时Service的DataSource也作相应的修改:WCF的DataContract: 1 [DataContract] 2 public class Member 3 { 4 [Data... 阅读全文
posted @ 2012-04-22 08:11 郭明锋 阅读(2665) 评论(11) 推荐(5) 编辑
摘要: 接上文【Expression 序列化】WCF的简单使用及其Expression Lambada的序列化问题初步解决方案(二) 上文最后留下了一个问题,引起这个问题的操作是把原来通过硬编码字符串来设置的Expression参数改为接收用户输入。这是个非常正常的需求,可以说如果这个问题不解决,上文的Expression序列化的方法是无法应用到实际项目中的。下面来分析异常引起的原因。 首先,来查看一下接收输入来组装的Expression与硬编码的方式生成有什么不同: 1 private static void Method02() 2 { 3 Expression<Func<Memb.. 阅读全文
posted @ 2012-04-11 01:53 郭明锋 阅读(2180) 评论(16) 推荐(5) 编辑
摘要: 接上文【Expression 序列化】WCF的简单使用及其Expression Lambada的序列化问题初步解决方案(一)上文留下了一个问题没有处理,但最后也找到了相应的解决方案,下面就来说下问题的解决Expression Tree Serializer提供的解决方案是 把Expression表达式树转换为XElement类型的XML数据,传输到服务端,再反转换还原成原来的Expression表达式所以,客户端与服务端之间传送的数据是XElement类型的数据了,从而避开了Expression类型不能序列化的问题我们先来了解一下Expression Tree Serializer的使用,下载 阅读全文
posted @ 2012-04-10 03:10 郭明锋 阅读(2488) 评论(3) 推荐(3) 编辑
摘要: 在园子里混迹多年,始终保持着“只看帖不回帖”的习惯,看了很多,学了很多,却从不敢写些东西贴出来,一来没什么可写的,二来水平不够,怕误人子弟……最近在做一个MVC+WCF+EF的项目,遇到问题不少,但大多数问题都是前人遇到并解决了的,感谢园子里的大牛们的无私奉献。俗话说“礼尚往来”,我也在此分享一个最... 阅读全文
posted @ 2012-04-10 00:30 郭明锋 阅读(3828) 评论(8) 推荐(7) 编辑
摘要: 一个优秀的 JavaScript 框架,一篇 jQuery 常用方法及函数的文章留存备忘。jQuery 常见操作实现方式$("标签名") //取html元素 document.getElementsByTagName("")$("#ID") //取单个控件document.getElementByI... 阅读全文
posted @ 2011-05-06 11:41 郭明锋 阅读(1758) 评论(0) 推荐(3) 编辑