摘要: 仓储的实现:基本篇我们先从技术角度考虑仓储的问题。实体框架(EntityFramework)中,操作数据库是非常简单的:在ObjectContext中使用LINQ to Entities即可完成操作。开发人员也不需要为事务管理而操心,一切都由EF包办。与原本的ADO.NET以及LINQ to SQL相比,EF更为简单,LINQ to Entities的引入使得软件开发变得更为“领域化&... 阅读全文
posted @ 2010-07-07 12:51 dax.net 阅读(23931) 评论(26) 推荐(16) 编辑
摘要: 模型对象的生命周期 - 仓储 上文中已经提到了管理领域模型对象生命周期的两大角色,即工厂与仓储,并对工厂的EntityFramework实践作了详细的描述。本节主要介绍仓储的概念,由于仓储的内容比较多,我将在接下来的两节中具体讲解仓储的架构设计与实践经验。 仓储(Repository),顾名思义,就是一个仓库,这个仓库保存着领域模型的实体对象。在业务处理的过程中,我们有可能需要把正在参与处理过程... 阅读全文
posted @ 2010-07-07 09:43 dax.net 阅读(22926) 评论(22) 推荐(13) 编辑
摘要: 模型对象的生命周期 - 工厂首先应该认识到,是对象就有生命周期。这一点无论在面向对象语言还是在领域驱动设计中都适用。在领域驱动设计中,模型对象生命周期可以简要地用下图表示: 通过上图可以看到,对象通过工厂从无到有创建,创建后处于活动状态,此时可以参与领域层的业务处理;对象通过仓储实现持久化(也就是我们常说的“保存”)和重建(也就是我们常说的“读取”)... 阅读全文
posted @ 2010-07-07 09:15 dax.net 阅读(18037) 评论(12) 推荐(5) 编辑
摘要: 聚合聚合(Aggregate)是领域驱动设计中非常重要的一个概念。简单地说,聚合是这样一组领域对象(包括实体和值对象),这组领域对象联合起来表述一个完整的领域概念。比如,根据Eric Evans《领域驱动设计》一书中的例子,一辆车包含四个轮子,轮子离开“车”就毫无意义,此时这个联合体就是聚合,而“车”就是聚合根(Aggregate Root)。 从实... 阅读全文
posted @ 2010-07-07 09:01 dax.net 阅读(24806) 评论(36) 推荐(16) 编辑
摘要: 存储过程 - 领域驱动的反模式EntityFramework(EF)中有一项功能,就是能够根据数据库中的存储过程生成实体的行为(或称方法,以下统称方法)。我在本系列的第一篇博文中就已经提到,这种做法并不可取!因为存储过程是技术架构中的内容,而我们所关注的却是领域模型。Andrey Yemelyanov在其“Using ADO.NET EF in DDD: A Pattern Appro... 阅读全文
posted @ 2010-07-07 08:36 dax.net 阅读(19309) 评论(6) 推荐(7) 编辑
摘要: 案例:一个简易的销售系统从现在开始,我们将以一个简易的销售系统为例,探讨EntityFramework在领域驱动设计上的应用。为了方便讨论,我们的销售系统非常简单,不会涉及客户存在多个收货地址的情况,也不会包含任何库存管理的内容。假设我们的系统只需要维护产品类型、产品以及客户信息,并能够帮客户下订单、跟踪订单状态,以及接受客户退货。从简单的分析我们大致可以了解到,这个系统将会有如下实体:客户、单据... 阅读全文
posted @ 2010-07-07 08:32 dax.net 阅读(28563) 评论(46) 推荐(11) 编辑
摘要: 分层架构在引入实例以前,我们有必要回顾,并进一步了解分层架构。“层”是一种体系结构模式[POSA1],也是被广大软件从业人员用得最为广泛而且最为灵活的模式之一。记得在CSDN上,时常有朋友问到:“分层是什么?为什么要分层?三层架构是不是就是表现层、业务逻辑层和数据访问层?” 到这里,你可能会觉得这些朋友的问题很简单,分层嘛,不就是将具有不同职责的组件... 阅读全文
posted @ 2010-07-07 08:13 dax.net 阅读(40085) 评论(33) 推荐(37) 编辑
摘要: 从DataTable到EntityObject虽然从技术角度讲,DataTable与EntityObject并没有什么可比性,然而,它暗示了一场革命正在悄然进行着,即使是微软,也摆脱不了这场革命的飓风。 软件设计思想需要革命,需要摆脱原有的思路,而走向面向领域的道路。你或许会觉得听起来很玄乎,然而目前软件开发的现状使你不得不接受这样的现实,仍然有大帮的从业人员成天扯着数据库不放,仍然有大帮的人在问... 阅读全文
posted @ 2010-07-07 07:58 dax.net 阅读(32684) 评论(38) 推荐(32) 编辑
摘要: 写在前面 其实这系列文章已经被很多网友转载过了,我自己也在前面的博客中给出了原文的链接。但毕竟博客园的人气更旺,加上不少网友强烈要求我把文章转贴到博客园,因此最终下定决心,将这系列文章重新整理并转贴在博客园上。 根据网友的讨论结果,以及自己在实践中的不断积累,在整理的过程中,我会将原文中的描述作相应调整。不仅如此,也有不少关心领域驱动设计的网友在原文的评论栏目中提了问题或作了批注,我也针对网友的问... 阅读全文
posted @ 2010-07-07 07:56 dax.net 阅读(24679) 评论(17) 推荐(19) 编辑