摘要: 前面介绍了查询的基础扩展,下面准备给大家介绍一些有用的查询封装手法,比如对日期范围查询,数值范围查询的封装等,为了支持这些功能,需要增强公共操作类。 Lambda表达式公共操作类,我在前面已经简单介绍过,要么从Lambda表达式中获取信息,要么动态创建Lambda表达式,本篇直接贴代码,如果发... 阅读全文
posted @ 2015-01-06 18:09 何镇汐 阅读(2161) 评论(12) 推荐(4) 编辑
摘要: 上一篇介绍了IQueryable的Where方法存在的问题,并扩展了一个名为Filter的过滤方法,它是Where方法的增强版。本篇将介绍查询的另一个重要主题——分页与排序。 对于任何一个信息系统,查询都需要分页,因为不可能直接返回表中的所有数据。 如果直接使用原始的Ado.Net,我们可以... 阅读全文
posted @ 2015-01-03 21:08 何镇汐 阅读(3725) 评论(11) 推荐(5) 编辑
摘要: 上面两篇已经作好准备,本文将进行基础查询扩展。当使用了Entity Framework这样的ORM框架以后,我们查询的核心被集中在IQueryable的Where方法上。 如果UI需要通过姓名查询一个客户,会在UI上放置一个输入框作为客户姓名的查询条件。服务端接收以后通过Where方法进行过滤... 阅读全文
posted @ 2014-12-25 13:25 何镇汐 阅读(4280) 评论(14) 推荐(12) 编辑
摘要: 前一篇扩展了两个常用验证方法,本文将封装两个Lambda表达式操作,用来为下一篇的查询扩展服务。 Lambda表达式是一种简洁的匿名函数语法,可以用它将方法作为委托参数传递。在Linq中,大量使用Lambda表达式进行查询,不过这种Lambda表达式被Expression包装成表达式树。表达式... 阅读全文
posted @ 2014-12-24 13:54 何镇汐 阅读(3150) 评论(8) 推荐(9) 编辑
摘要: 前面介绍了仓储的基本操作,下面准备开始扩展查询,在扩展查询之前,首先要增加两个公共操作类,一个是经常要用到的验证方法,另一个是Lambda表达式的操作类。 很多时候,我们会判断一个对象是否为null,由于null是一个不能接受的值,它会导致“未将对象引用设置到对象的实例”的严重错误,所以当检测... 阅读全文
posted @ 2014-12-22 23:57 何镇汐 阅读(3542) 评论(3) 推荐(7) 编辑
摘要: 前一篇介绍了仓储的基本概念,并谈了我对仓储的一些认识,本文将实现仓储的基本功能。 仓储代表聚合在内存中的集合,所以仓储的接口需要模拟得像一个集合。仓储中有很多操作都是可以通用的,可以把这部分操作抽取到基类中。 在Util.Domains项目中创建一个文件夹Repositories,这个文件夹... 阅读全文
posted @ 2014-12-17 17:00 何镇汐 阅读(5938) 评论(12) 推荐(13) 编辑
摘要: 前面已经介绍过Entity Framework的工作单元和映射层超类型的封装,从本文开始,将逐步介绍仓储以及对查询的扩展支持。 什么是仓储 仓储表示聚合的集合。 仓储所表现出来的集合外观,仅仅是一种模拟,除了测试以外,没有理由使用内存中真正的... 阅读全文
posted @ 2014-12-12 11:59 何镇汐 阅读(5781) 评论(34) 推荐(18) 编辑
摘要: 上一篇介绍了工作单元层超类型的封装演化过程,本文将介绍对Entity Framework映射层超类型的封装。 使用Entity Framework一般需要映射三种类型的对象,即实体、聚合、值对象。 聚合与实体映射的主要区别是:聚合映射单属性标识Id,并需要映射乐观离线锁Version,而实体... 阅读全文
posted @ 2014-12-08 18:55 何镇汐 阅读(3766) 评论(1) 推荐(7) 编辑
摘要: 上一篇介绍了DDD聚合以及与并发相关的各种锁机制,本文将介绍另一个核心元素——工作单元,它是实现仓储的基础。 什么是工作单元 维护受业务事务影响的对象列表,并协调变化的写入和并发问题的解决。 这是《企业应用架构模式》中给出的定义,不过看上去有... 阅读全文
posted @ 2014-12-06 21:10 何镇汐 阅读(4899) 评论(6) 推荐(11) 编辑
摘要: 前面已经介绍了DDD分层架构的实体和值对象,本文将介绍聚合以及与其高度相关的并发主题。 我在之前已经说过,初学者第一步需要将业务逻辑尽量放到实体或值对象中,给实体“充血”,这样可以让业务逻辑高度内聚,并为你提供业务逻辑的唯一访问点。而聚合则是第二步,它将多个相关业务概念包装到单一的概念中,从而... 阅读全文
posted @ 2014-12-04 04:10 何镇汐 阅读(8976) 评论(26) 推荐(30) 编辑
摘要: 上一篇介绍了值对象的基本概念,得到了一些朋友的支持,另外也有一些朋友提出了不同意见。这其实是很自然的事情,设计本来就充满了各种可能性,没有绝对正确的做法,只有更好的实践。但是设计与实践的好与坏,对于不同的人,以及处于不同的环境都有不同的诠释,这是一个仁者见仁,智者见智的问题。DDD非常抽象,以至... 阅读全文
posted @ 2014-11-27 19:33 何镇汐 阅读(5285) 评论(5) 推荐(9) 编辑
摘要: 前面介绍了DDD分层架构的实体,并完成了实体层超类型的开发,同时提供了验证方面的支持。本篇将介绍另一个重要的构造块——值对象,它是聚合中的主要成分。 如果说你已经在使用DDD分层架构,但你却从来没有使用过值对象,这毫不奇怪,因为多年来养成的数据建模思维已经牢牢把你禁锢,以致于你在使用面向对象方... 阅读全文
posted @ 2014-11-25 20:26 何镇汐 阅读(7883) 评论(33) 推荐(17) 编辑
摘要: 在应用程序框架实战十四:DDD分层架构之领域实体(基础篇)一文中,我介绍了领域实体的基础,包括标识、相等性比较、输出实体状态等。本文将介绍领域实体的一个核心内容——验证,它是应用程序健壮性的基石。为了完成领域实体的验证,我们在前面已经准备好了验证公共操作类和异常公共操作类。 .Net提供的Da... 阅读全文
posted @ 2014-11-20 23:43 何镇汐 阅读(8888) 评论(25) 推荐(29) 编辑
摘要: 任何系统都需要处理错误,本文介绍的异常公共操作类,用于对业务上的错误进行简单支持。 对于刚刚接触.Net的新手,碰到错误的时候,一般喜欢通过返回bool值的方式指示是否执行成功。public bool 方法名() { //执行代码,成功返回true,否则返回false} 不过上面的方法... 阅读全文
posted @ 2014-11-19 11:52 何镇汐 阅读(5708) 评论(19) 推荐(12) 编辑
摘要: 为了能够验证领域实体,需要一个验证公共操作类来提供支持。由于我将使用企业库(Enterprise Library)的验证组件来完成这项任务,所以本文也将演示对第三方框架的封装要点。 .Net提供了一个称为DataAnnotations的验证技术,即在对象的属性上添加一些Attribute,比如... 阅读全文
posted @ 2014-11-18 23:22 何镇汐 阅读(6061) 评论(19) 推荐(15) 编辑
摘要: 上一篇,我介绍了自己在DDD分层架构方面的一些感想,本文开始介绍领域层的实体,代码主要参考自《领域驱动设计C#2008实现》,另外参考了网上找到的一些示例代码。什么是实体 由标识来区分的对象称为实体。 实体的定义隐藏了几个信息:两个实体对象,只要它们的标识属性值相等,哪怕标识属性以外的所有属... 阅读全文
posted @ 2014-11-17 18:54 何镇汐 阅读(9393) 评论(17) 推荐(19) 编辑
摘要: 前面介绍了应用程序框架的一个重要组成部分——公共操作类,并提供了一个数据类型转换公共操作类作为示例进行演示。下面准备介绍应用程序框架的另一个重要组成部分,即体系架构支持。你不一定要使用DDD这样的架构,使用单层架构和普通三层架构一样可以,不过你如果希望获得更进一步的复用性和封装度,使用更加面向对... 阅读全文
posted @ 2014-11-14 20:25 何镇汐 阅读(13803) 评论(32) 推荐(29) 编辑
摘要: 上一篇以TDD方式介绍了数据类型转换公共操作类的开发,并提供了单元测试和实现代码,本文将演示通过扩展方法来增强公共操作类,以便调用时更加简化。 下面以字符串转换为List为例进行讨论。string input = "83B0233C-A24F-49FD-8083-1337209EBC9A,EA... 阅读全文
posted @ 2014-11-13 14:01 何镇汐 阅读(5443) 评论(10) 推荐(11) 编辑
摘要: 上一篇介绍了数据类型转换的一些情况,可以看出,如果不进行封装,有可能导致比较混乱的代码。本文通过TDD方式把数据类型转换公共操作类开发出来,并提供源码下载。 我们在 应用程序框架实战十一:创建VS解决方案与程序集 一文已经创建了解决方案,包含一个类库项目和一个单元测试项目。单元测试将使用.Ne... 阅读全文
posted @ 2014-11-12 17:28 何镇汐 阅读(6794) 评论(14) 推荐(15) 编辑
摘要: 本系列文章将介绍一些对初学者有帮助的辅助类,这些辅助类本身并没有什么稀奇之处,如何能发现需要封装它们可能更加重要,所谓授之以鱼不如授之以渔,掌握封装公共操作类的技巧才是关键,我会详细说明创建这些类的动机和思考过程,以帮助初学者发现和封装自己需要的东西。创建公共操作类的技巧,大家可以参考我的这篇文... 阅读全文
posted @ 2014-11-11 18:28 何镇汐 阅读(7282) 评论(13) 推荐(15) 编辑
摘要: 本文专门为初学者而写,因为很多初学者可能还不了解公共操作类的作用和封装技巧,大部分有经验的程序员都会把自己所碰到的技术问题整理封装成类,这就是公共操作类。公共操作类往往具有一些通用性,也可能专门解决某些棘手问题。公共操作类是应用程序框架的核心,主要目标是解决大部分技术问题。我将在本文介绍封装公共... 阅读全文
posted @ 2014-11-10 05:11 何镇汐 阅读(8127) 评论(19) 推荐(27) 编辑
摘要: 上一篇,介绍了开发环境需要的工具和版本,本篇将动手创建VS解决方案。 对于本系列文章提供的示例,我想通过两种途径来演示,一种是单元测试,另外为了能更直观的看到效果,还会提供一个用户界面来展示。为了不分散注意力,前期只提供非常简陋的原始界面,后期如果有时间的话,我想使用MVC +某个RIA框架+... 阅读全文
posted @ 2014-11-09 04:30 何镇汐 阅读(6522) 评论(4) 推荐(11) 编辑
摘要: 前面几篇已经把废话基本说完了,现在准备进入实战阶段。 第一步是把开发环境准备好,下面是本系列所使用的开发工具及其版本。为了避免你无法顺利打开本系列提供的下载示例,建议你最好跟我使用的版本相同。 Visual Studio2013 ReSharpe最新版本,目前版本是8.2.2 ReSha... 阅读全文
posted @ 2014-11-08 13:56 何镇汐 阅读(7993) 评论(12) 推荐(34) 编辑
摘要: 使用应用程序框架来开发项目,从软件项目的角度来看,可以获得更快的开发进度,更好的代码质量、复用性、扩展性、可维护性等好处。但如果换个角度思考,也会发现其它一些问题。 首先,软件开发是以人为本的,应用程序框架是某个人或某几个人大脑中知识结构的具体表现,所以应用程序框架高度依赖它的创建人,框架越强... 阅读全文
posted @ 2014-11-07 15:42 何镇汐 阅读(5158) 评论(5) 推荐(7) 编辑
摘要: 分层架构根据相关职责将应用程序模块切割为多个层次,那么应用程序框架本身还要不要进行层次划分?随着对应用程序框架的理解加深,以及项目复杂度的提升,为应用程序框架分层就显得很有必要,它将影响你如何创建VS解决方案。 在刚开始建立应用程序框架时,你首先会想到的是把技术方面的东西抽取出来,放到专门的文... 阅读全文
posted @ 2014-11-06 22:52 何镇汐 阅读(6548) 评论(14) 推荐(24) 编辑
摘要: 建立应用程序框架,首先要考虑的问题是,你准备采用哪种分层架构,然后根据应用程序框架的逻辑层次来确定需要创建的VS解决方案和程序集。 如果项目很小,需求很简单,时间异常紧迫,且你手上没有任何积累,那么,单层架构将是首选,最简单的单层架构如下图所示(为了集中你的注意力,我把不相关的文件都删除了)。... 阅读全文
posted @ 2014-11-05 22:03 何镇汐 阅读(9506) 评论(23) 推荐(30) 编辑
摘要: 之前说过,.Net Framework为所有.Net程序员提供底层支持,第三方开源框架建立在.Net Framework的基础上,专门解决某些特定问题,而应用程序框架则建立在.Net Framework和第三方框架的基础上,为项目开发的方方面面保驾护航。它们的作用虽然都是帮助程序员更好的建立应用... 阅读全文
posted @ 2014-11-04 01:30 何镇汐 阅读(6724) 评论(13) 推荐(16) 编辑
摘要: 应用程序框架是用来支持应用程序开发的,它就好像一个保姆,在开发的每一个细节对程序员呵护倍至。那么,应用程序框架应该包含哪些内容呢?原则上来说,只要期望能够复用的所有东西,都可以进入你的框架。 开发新手与经验丰富的老手,其中一个重要的区别在于复用代码的方式不同。开发新手喜欢复制粘贴,而老手则更倾... 阅读全文
posted @ 2014-11-03 13:08 何镇汐 阅读(7596) 评论(12) 推荐(15) 编辑
摘要: 如果没有什么好处,不会有人愿意去做,那么,你真的需要应用程序框架吗,它能为你带来什么好处?应用程序框架为你提供现成的开发环境 现在来了一个项目,你可以直接打开VS,然后就开工敲代码吗?不行,你得先创建项目,当使用了分层架构,还需要创建更多的项目,这些项目根据依赖关系进行配置。然后依次引用各种依赖组... 阅读全文
posted @ 2014-10-30 14:06 何镇汐 阅读(6867) 评论(3) 推荐(8) 编辑
摘要: 什么是应用程序框架?正如框架是架构的具体实现一样,应用程序框架是应用程序架构的具体实现。不过这样说了等于没说,因为框架和架构都是如此抽象。为了获得直观的感受,下面先看看更具体的.Net Framework和第三方框架。 .Net Framework为.Net程序员提供了一个庞大的类库,几乎任何... 阅读全文
posted @ 2014-10-30 09:07 何镇汐 阅读(10388) 评论(5) 推荐(14) 编辑
摘要: 大约10年前,我刚刚步入.Net开发,那时候还很流行单层架构,直接在界面上拖控件,然后绑定数据。数据库操作使用原生的Ado.Net,每次都要创建数据库连接,打开连接,发送Sql,获取结果、关闭连接。每当我需要进行数据库操作的时候,就把这一段复制粘贴过去,就这样干了几个月。 一日,一位师兄给我介... 阅读全文
posted @ 2014-10-29 17:16 何镇汐 阅读(6866) 评论(6) 推荐(9) 编辑
摘要: 敏捷时代的来临,迫使微软.Net技术也在向敏捷方向发展。近几年,.Net在数据访问、Web、测试等多个领域大刀阔斧的进行改革,新技术不断涌现。一方面这是值得庆幸的,让.Net程序员在开发复杂项目有了更多的选择,一改往日只能拖控件绑定数据的局面。另一方面,程序员需要大量的学习,并且需要依赖更多的第... 阅读全文
posted @ 2014-10-29 15:02 何镇汐 阅读(7521) 评论(16) 推荐(15) 编辑