专注于领域驱动设计的研究与实践系列转载

专注于领域驱动设计的研究与实践
摘要: 这段时间一直在忙工作,已经有一个月没更新博客了。从现在开始,我将继续讨论Microsoft NLayerApp案例,希望各位爱好Microsoft NLayerApp案例、架构设计以及DDD的朋友们能够继续关注。 从架构上看,Microsoft NLayerApp对“复杂的业务系统应用程序”这样一种应用程序的架构设计提供了一系列的设计准则。所谓“复杂的业务系统应用程序”是指这样一类业务系统应用程序...阅读全文

posted @ 2011-05-10 14:01 dax.net 阅读(699) | 评论 (1) 编辑 |

摘要: 在对NLayerApp实际项目进行讨论之前,让我们首先学习一下(或者应该说重温一下)分层/多层架构与应用系统设计原则。很多朋友会认为这些都是老掉牙的内容,只要是软件从业人员,都会对这些内容非常熟悉。然而,果真如此吗?我在这里整理这部分内容,一方面是为介绍NLayerApp打下基础,而另一方面,则是希望借此机会将这些理论性的东西做个归纳,也希望读者朋友能够认真阅读,毕竟温故知新嘛。 需要说明的是,从本章节开始,大多数理论性的东西都源自Microsoft Spain团队针对NLayerApp所编写的《Architecture Guide Book》,事实上这本Guideline的英文版至今也还没有阅读全文

posted @ 2011-03-03 15:15 dax.net 阅读(1407) | 评论 (10) 编辑 |

摘要: 项目简介Microsoft – Spain团队有一个很不错的“面向领域多层分布式项目”案例:Microsoft – Domain Oriented N-Layered .NET 4.0 App Sample(在本系列文章中,我使用NLayerApp作为该项目的名称进行介绍),在codeplex上的地址是:http://microsoftnlayerapp.codeplex.com/。它是学习领域驱动设计(DDD)的一个非常不错的案例项目。该项目采用的是经典的DDD架构,而不是CQRS架构,但我觉得整个案例做的非常不错,基本上包含了基于DDD的架构实践的各个方面。因此,应不少社区朋友的要求,我打阅读全文

posted @ 2011-03-01 13:21 dax.net 阅读(1577) | 评论 (9) 编辑 |

摘要: 启动WCF服务 在TinyLibraryCQRS解决方案下,找到TinyLibrary.Services项目 右键单击CommandService.svc,然后选择View in Browser,这将启动ASP.NET Development Server 当ASP.NET Development Server成功启动,并在浏览器中打开了CommandService.svc后,将出现如下界面 使...阅读全文

posted @ 2011-02-15 15:12 dax.net 阅读(1034) | 评论 (1) 编辑 |

摘要: Apworks使用配置文件来启动整个系统。在上文中也能够看出,WCF服务在启动时,同时也启动了Apworks系统。所以,本节简要介绍这个WCF服务针对Apworks的相关配置节内容。 双击TinyLibrary.Services项目的web.config文件,根据下面的XML代码编辑该文件。 以上配置文件主要有两个configSection:apworksConfiguration和unityC...阅读全文

posted @ 2011-02-15 14:27 dax.net 阅读(1028) | 评论 (6) 编辑 |

摘要: 到目前为止,我们还未涉及任何数据库的配置工作。本章节将简单介绍基于Apworks的应用程序的数据库配置。在SQL Server中(目前的Apworks版本仅支持SQL Server)创建两个数据库:TinyLibraryEventDB和TinyLibraryQueryDB,然后分别执行如下SQL脚本:TinyLibraryEventDBTinyLibraryQueryDB由于我们所使用的数据库系统是SQL Server,对于上面的TinyLibraryEventDB而言,它就是直接使用的Apworks应用开发框架中自带的SQL脚本。开发人员可以在Apworks的安装目录中找到该脚本文件。就关系阅读全文

posted @ 2011-02-14 16:31 dax.net 阅读(180) | 评论 (0) 编辑 |

摘要: 在本节,我们将介绍.NET WCF服务的创建过程。在Solution Explorer中,右键单击TinyLibraryCQRS,然后选择Add | New Project…菜单,这将打开Add New Project对话框在Installed Templates 选项卡下,选择Visual C# | WCF,然后选择WCF Service Application,确保所选.NET版本为.NET Framework 4,在Name文本框中输入TinyLibrary.Services,然后单击OK按钮右键单击TinyLibrary.Services的References节点,然后选阅读全文

posted @ 2011-02-14 16:06 dax.net 阅读(1565) | 评论 (1) 编辑 |

摘要: 客户端程序通过命令告知系统“应该做什么”。事实上,这是一种单向的交互过程,客户端程序仅仅向领域模型发送命令请求,它们并不会通过领域模型来查询某些数据信息。在CQRS架构的应用程序中,“查询”是另一部分的内容,这将在接下来的章节中单独讨论。当应用服务器端接收到来自客户端的命令请求后,就会将这些命令推送到命令总线。命令处理器会侦听命令总线,并相应地处理命令请求。现在,让我们在TinyLibraryCQ...阅读全文

posted @ 2011-02-14 14:51 dax.net 阅读(1531) | 评论 (0) 编辑 |

摘要: 根据wikipedia中关于“事件”的描述,“事件”可以被看成是“状态的一次变化”。例如:当一个客户购买了一台汽车,汽车的状态就从“待售”转变为“已售”。汽车销售系统则把这种状态的改变看成是一次事件的产生、发布、检测以及被更多其它应用程序所使用的过程。对于CQRS架构的应用程序而言,事件产生于领域模型,并由领域模型发布事件同时由领域模型首次捕获并处理,因此,我们称之为领域事件(Domain Events)。在Apworks开发框架中,与领域事件相关的代码都被定义在Apworks.Events命名空间下。请使用下面的步骤为TinyLibraryCQRS解决方案添加领域事件。在 Solution 阅读全文

posted @ 2011-01-26 16:10 dax.net 阅读(1246) | 评论 (11) 编辑 |

摘要: 由于事件溯源(Event Sourcing)的需要,领域事件需要被保存到外部的存储系统中。由于事件本身描述了在特定对象上所发生的事情,因此,为了能够跟踪对象状态的变化过程以获得Event Audit的能力,我们总是将事件的数据保存在存储系统中,而从来不去删除它们。或许你会认为,这样做有点极端,时间长了,存储系统中的数据量将变得非常庞大。遇到这种情况,你需要引入备份和归档策略,而不是直接将过期的数据删除,因为,存储成本是便宜的,但数据却是有价值的。对于一些生命周期比较长的领域对象而言,发生在它们身上的事件数量会随着时间的推移而增大,甚至会变得巨大。于是,通过使用这大量的事件数据来重建领域模型将变阅读全文

posted @ 2011-01-26 15:08 dax.net 阅读(286) | 评论 (7) 编辑 |

摘要: 领域模型是应用程序的核心,它包括了领域对象、状态、方法、事件、业务逻辑以及对象之间的关系。现在,我们来为Tiny Library CQRS创建一个领域模型项目。在 Solution Explorer 下,右键单击TinyLibraryCQRS项目,单击 Add | New Project… 菜单,这将打开 Add New Project 对话框 在 Installed Templates 选项卡下,选择 Visual C# | Windows,然后选择 Class Library ,确保所选的Framework版本是.NET Framework 4,在 Name 文本框中,输入TinyLibr阅读全文

posted @ 2011-01-26 15:07 dax.net 阅读(283) | 评论 (0) 编辑 |

摘要: 在Apworks框架发布Alpha版本的时候,我已经针对其开发案例:Tiny Library CQRS写了Walkthrough文档,地址是:http://apworks.org/custom/documents/wlkthr_BuildAppsUsingApworks/。为了走国际化道路,这篇文章是全英文的,社区里有不少网友表示难以理解。趁着这几天不算很忙,我抽空将其又翻译回中文,并加入更多的批准内容,供爱好DDD、CQRS和架构设计的朋友阅读参考,也希望大家能够积极参加讨论。简介Apworks是一套应用程序开发框架,软件架构师和开发人员可以使用这套开发框架开发出面向领域(Domain-Ce阅读全文

posted @ 2011-01-26 15:05 dax.net 阅读(1235) | 评论 (4) 编辑 |

摘要: 这个问题来源于Apworks应用开发框架的设计。由于命令与查询职责的分离,使得基于CQRS体系结构风格的应用系统的外部存储系统的结构变得简单起来:在“命令”部分,简单地说,只需要Event Store和Snapshot Store来保存Domain Model;而“查询”部分,则又是基于事件派送与侦听的系统集成。之前我也提到过,“查询”部分由于不牵涉到Domain Model,于是,它的设计应该随...阅读全文

posted @ 2011-01-19 12:34 dax.net 阅读(1800) | 评论 (2) 编辑 |

摘要: 有不少网友仍然对CQRS与事件溯源(Event Sourcing)不是很了解,对经典的应用系统架构与CQRS架构之间的差别没有一个大概的认识。本文基本上摘自Greg Young的CQRS Documents一文(由daxnet本人翻译并做了简要的注释),希望能够对应用系统架构的爱好者有所帮助。【注:本文主体内容节选并翻译自Greg Young的CQRS Documents。如需查看原文,请单击此处】一、经典的应用系统结构在了解基于领域驱动设计(Domain Driven Design, DDD)的应用系统之前,首先让我们了解一下经典的应用系统结构。这种经典的应用系统结构往往被认定为设计与开发分阅读全文

posted @ 2011-01-06 19:50 dax.net 阅读(1200) | 评论 (2) 编辑 |

摘要: 领域仓储(Domain Repository)与事件存储(Event Store)是CQRS体系结构应用系统中C部分(Command部分)的重要组件。虽然都是存储机制,但两者有着本质的区别:领域仓储是属于领域层的,而事件仓储则是属于基础结构层的。领域模型产生事件,领域仓储负责保存、发布事件,并通过事件序列重塑领域模型。由于领域仓储的存在,使得“内存领域模型(In-memory Domain)”成为可能。在上文中我已经对对象的状态做了一些介绍,通过这些介绍我们能够了解到,在应用系统中,是领域事件导致了对象状态的变化,于是,我们只需要把这些领域事件按顺序记录下来,我们就有能力将领域模型还原到任何一阅读全文

posted @ 2011-01-04 19:45 dax.net 阅读(1287) | 评论 (3) 编辑 |

摘要: Tiny Library CQRS的介绍文章有好些日子没有更新了,因为最近一直在忙着发布Apworks应用开发框架。原本打算在2011年1月1日发布,以迎接新年的到来,后来确定了还是在2010年12月31日发布,就算是给过去的一年做个留念。哈哈。一直关注我的博客的园友都知道,之前我的一些领域驱动设计的案例,都是以Apworks为基础的。由于时间关系,Apworks一直没有一个固定的版本,所以在那些案例中,我都是将Apworks的程序集加入了案例的发布包里。现在,终于能够为Apworks整出一个“可用”的版本,并将其发布到了codeplex上,地址是:http://apworks.codeple阅读全文

posted @ 2010-12-31 10:56 dax.net 阅读(1486) | 评论 (4) 编辑 |

摘要: 从结构上看,tlibcqrs项目并不复杂,但对其进行介绍,的确让我感到有点无从着手。还是先从领域模型中的对象的行为和状态谈起吧。先来谈谈对象状态。据我理解,状态就是一种数据,它用来描述,在某个特定的时间上,这个对象所具有的特质,它将作为对象行为发生的依据和结果。我们平时做设计和编程的时候,尤其是在做数据访问层的时候,特别喜欢一些仅仅包含getter/setter属性的对象,以便调用方能够通过getter获得对象的状态,使用setter设置对象的状态。之前我也说明过,状态并非getter/setter属性,在OOP上,状态表现为“字段”(fields)。现在我们讨论的不是数据访问层的DAO,而是阅读全文

posted @ 2010-12-22 13:04 dax.net 阅读(1152) | 评论 (18) 编辑 |

摘要: 写在前面也许在阅读了上篇文章中我列出的那部分资料后,还是有很多朋友对领域驱动设计不了解。正如上文评论中有网友提到微软西班牙团队也做了一个面向领域的分布式应用系统架构的案例,地址是http://microsoftnlayerapp.codeplex.com/。在这个站点的首页上,又对领域驱动设计做了诠释,我觉得总结的很好,特地将其翻译成中文写在这里,供大家参考:DDD is much more than this! We're talking about complex apps…, all their business rules (Domain logic) are points that,阅读全文

posted @ 2010-12-15 10:29 dax.net 阅读(1338) | 评论 (11) 编辑 |

摘要: 写在前面有段时间没有更新博客了,一方面因为工作繁忙,另一方面则是我最近一直在坚持设计和完善基于DDD的应用系统开发框架Apworks。读过我《领域驱动设计案例:Tiny Library》这一系列文章的朋友一定听说过Apworks框架,虽然这个框架至今仍未成熟到能够用在真正的系统开发上,但它已经实现了CQRS体系结构模式,已经可以用于软件架构设计的演示上了。从这一讲开始,我将逐步介绍如何采用CQRS架构实现Tiny Library的业务。你可能会听得烦了:又是Tiny Library,能不能换点别的?呵呵,我开始时想做一个简单的论坛出来,不过为了能让读者朋友在经典DDD实践和CQRS实践上做个对阅读全文

posted @ 2010-12-14 15:17 dax.net 阅读(1393) | 评论 (15) 编辑 |

摘要: 工作繁忙,很久没有更新博客了。下面言归正传,简单介绍一下Tiny Library的用户界面实现。如前所述,Tiny Library采用ASP.NET MVC框架实现了基于浏览器的用户界面。回顾一下《业务逻辑与系统结构》一文,从层次架构图中我们可以清楚地看到,用户界面层是通过WCF Services与系统交互的。为了快速简单地实现Tiny Library,我只是简单地使用了ASP.NET MVC,因...阅读全文

posted @ 2010-11-18 16:49 dax.net 阅读(2358) | 评论 (7) 编辑 |

摘要: 今天抽空将我写的与领域驱动设计有关的系列文章汇总于此,便于大家查看。根据撰写的进度,本列表会不定期更新,敬请关注! Entity Framework之领域驱动设计实践 EntityFramework之领域驱动设计实践 - 前言 EntityFramework之领域驱动设计实践 (一):从DataTable到EntityObject EntityFramework之领域驱动设计实践 (二):分层架构...阅读全文

posted @ 2010-11-02 17:39 dax.net 阅读(4177) | 评论 (19) 编辑 |

摘要: Tiny Library使用应用服务层向用户界面层提供服务,具体实现是采用Microsoft WCF Services。在Tiny Library的解决方案中,是由TinyLibrary.Services项目为整个系统提供这一WCF服务的。按照传统的应用系统分层方法,TinyLibrary.Services项目位于领域模型层之上、用户界面层之下,它是UI与Domain的交互界面。TinyLibra...阅读全文

posted @ 2010-11-02 08:11 dax.net 阅读(2174) | 评论 (6) 编辑 |

摘要: 在领域驱动设计的案例中,仓储的设计是很具有争议性的话题,因为仓储这个角色本身就与领域模型和基础结构层对象相关,它需要序列化领域对象(应该说是聚合),然后将其保存到基础结构层的持久化机制。于是,在领域驱动设计的社区中,存在两种观点:1、领域模型不能访问仓储,理由是:仓储需要跟技术架构层打交道,在领域模型中访问仓储就会破坏领域模型的纯净度。需要使用仓储的,需要在领域模型上加上一层,比如Applicat...阅读全文

posted @ 2010-10-28 20:27 dax.net 阅读(1864) | 评论 (7) 编辑 |

摘要: 本讲主要介绍基于Entity Framework的领域驱动设计建模。首先回顾一下Tiny Library的业务逻辑: 任何用户可以添加Library中的图书(简化起见,图书不能修改也不能删除),也可以查看图书的详细信息 注册用户,也就是读者,可以借书、还书、查看自己借过的图书列表和借书信息 请注意上面描述的黑体部分,这些概念出现在Tiny Library的领域知识(Domain Knowle...阅读全文

posted @ 2010-10-27 16:32 dax.net 阅读(2039) | 评论 (14) 编辑 |

摘要: 之前我发布了领域驱动设计的一个实践案例:Tiny Library。本章介绍该案例实现的业务逻辑与系统结构设计。业务逻辑Tiny Library的业务逻辑非常简单,主要就是如下两条:任何用户可以添加Library中的图书(简化起见,图书不能修改也不能删除),也可以查看图书的详细信息 注册用户,也就是读者,可以借书、还书、查看自己借过的图书列表和借书信息篇幅有限,我就不在此将案例的操作过程一一截图了,...阅读全文

posted @ 2010-10-20 08:13 dax.net 阅读(2347) | 评论 (19) 编辑 |

摘要: 应广大网友的要求,我最近抽空基于ASP.NET MVC + WCF + Entity Framework做了一个案例,该案例以图书馆图书管理、读者借书、还书为业务背景,以领域驱动设计为思想指导,全程采用Microsoft技术进行实践,希望能够给Microsoft技术的狂热者以及领域驱动设计的学者提供实践参考。本案例选用的业务逻辑非常简单,所以项目取名上我选用了“Tiny Library...阅读全文

posted @ 2010-10-18 07:58 dax.net 阅读(3327) | 评论 (23) 编辑 |

摘要: 有很多网友对这三者(Entities, Domain Services以及Repositories)有着疑惑,之前我也在我们的领域驱动设计QQ群里,解答了大家的疑惑,现在大致整理一下,供更多朋友参考。 领域服务与实体具有同等的地位 有些网友认为,仓储的相关操作应该放到领域服务中,而不应该放在实体中。认为实体是负责领域概念表述与业务逻辑处理的,而领域服务则是负责一些周边的工作,比如与位于技术架构层...阅读全文

posted @ 2010-09-21 22:05 dax.net 阅读(1764) | 评论 (8) 编辑 |

摘要: 是时候总结一下本系列文章了。还是应该自我批评一下,由于个人杂事多,加上工作繁忙,整个系列文章弄了大半年才断断续续写完。在撰写文章的过程中,也得到了大家的理解与支持,并让更多的朋友开始关注领域驱动设计,很是感激!在接下来的其它博文中,我将继续讨论领域驱动设计的实践经验。本系列文章首先从领域驱动设计的基础思想出发,讨论了基于.NET EntityFramework的领域驱动设计经验,这包括对实体、值对...阅读全文

posted @ 2010-08-10 10:03 dax.net 阅读(2647) | 评论 (13) 编辑 |

摘要: CQRS体系结构模式本文将对CQRS(Command Query Responsibility Segregation,命令查询职责分离)模式做一个相对全面的介绍。可以这么说,CQRS打破了经典的领域驱动设计实践,在应用CQRS的整个过程中,你将会以另一种不同的角度去考虑问题并寻求解决方案。比如,CQRS是事件驱动的体系结构,事件是如何产生如何分发又是如何处理的?事件驱动的体系结构适用于哪些类型的...阅读全文

posted @ 2010-08-02 11:16 dax.net 阅读(2774) | 评论 (15) 编辑 |

摘要: 服务(Services) 从本讲开始,所涉及的DDD话题可能与EntityFramework关系不大了。网友千万别骂我是标题党,呵呵。由于这部分内容并非是特定于EntityFramework的,更多的是在介绍模式及实践心得,所以EntityFramework的内容就会偏少了。为了使得针对一些话题的讨论能够延续下去,我仍然将这些文章安排在本系列中,希望读者朋友能够谅解。我也在标题中标注了【扩展阅读】...阅读全文

posted @ 2010-07-27 11:59 dax.net 阅读(1845) | 评论 (9) 编辑 |

摘要: 规约(Specification)模式本来针对规约模式的讨论,我并没有想将其列入本系列文章,因为这是一种概念性的东西,从理论上讲,与EntityFramework好像扯不上关系。但应广大网友的要求,我决定还是在这里讨论一下规约模式,并介绍一种专门针对.NET Framework的规约模式实现。很多时候,我们都会看到类似下面的设计:隐藏行号 复制代码 ? Customer仓储的一种设计 接下来的一...阅读全文

posted @ 2010-07-19 16:12 dax.net 阅读(2872) | 评论 (32) 编辑 |

摘要: 仓储的实现:深入篇早在年前的时候就已经在CSAI博客发表了上一篇文章:《仓储的实现:基础篇》。苦于日夜奔波于工作与生活之间,一直没有能够抽空继续探讨仓储的实现细节,也让很多关注EntityFramework和领域驱动设计的朋友们备感失望。闲话不多说,现在继续考虑,如何让仓储的操作在相同的事物处理上下文中进行。DDD引入仓储模式,其目的之一就是能够通过仓储隐藏对象持久化的技术细节,使得领域模型变得更...阅读全文

posted @ 2010-07-10 08:52 dax.net 阅读(2800) | 评论 (21) 编辑 |

摘要: 仓储的实现:基本篇我们先从技术角度考虑仓储的问题。实体框架(EntityFramework)中,操作数据库是非常简单的:在ObjectContext中使用LINQ to Entities即可完成操作。开发人员也不需要为事务管理而操心,一切都由EF包办。与原本的ADO.NET以及LINQ to SQL相比,EF更为简单,LINQ to Entities的引入使得软件开发变得更为“领域化&...阅读全文

posted @ 2010-07-07 12:51 dax.net 阅读(1831) | 评论 (13) 编辑 |

摘要: 模型对象的生命周期 - 仓储 上文中已经提到了管理领域模型对象生命周期的两大角色,即工厂与仓储,并对工厂的EntityFramework实践作了详细的描述。本节主要介绍仓储的概念,由于仓储的内容比较多,我将在接下来的两节中具体讲解仓储的架构设计与实践经验。 仓储(Repository),顾名思义,就是一个仓库,这个仓库保存着领域模型的实体对象。在业务处理的过程中,我们有可能需要把正在参与处理过程...阅读全文

posted @ 2010-07-07 09:43 dax.net 阅读(2787) | 评论 (4) 编辑 |

摘要: 模型对象的生命周期 - 工厂首先应该认识到,是对象就有生命周期。这一点无论在面向对象语言还是在领域驱动设计中都适用。在领域驱动设计中,模型对象生命周期可以简要地用下图表示: 通过上图可以看到,对象通过工厂从无到有创建,创建后处于活动状态,此时可以参与领域层的业务处理;对象通过仓储实现持久化(也就是我们常说的“保存”)和重建(也就是我们常说的“读取”)...阅读全文

posted @ 2010-07-07 09:15 dax.net 阅读(1509) | 评论 (0) 编辑 |

摘要: 聚合聚合(Aggregate)是领域驱动设计中非常重要的一个概念。简单地说,聚合是这样一组领域对象(包括实体和值对象),这组领域对象联合起来表述一个完整的领域概念。比如,根据Eric Evans《领域驱动设计》一书中的例子,一辆车包含四个轮子,轮子离开“车”就毫无意义,此时这个联合体就是聚合,而“车”就是聚合根(Aggregate Root)。 从实...阅读全文

posted @ 2010-07-07 09:01 dax.net 阅读(3184) | 评论 (12) 编辑 |

摘要: 存储过程 - 领域驱动的反模式EntityFramework(EF)中有一项功能,就是能够根据数据库中的存储过程生成实体的行为(或称方法,以下统称方法)。我在本系列的第一篇博文中就已经提到,这种做法并不可取!因为存储过程是技术架构中的内容,而我们所关注的却是领域模型。Andrey Yemelyanov在其“Using ADO.NET EF in DDD: A Pattern Appro...阅读全文

posted @ 2010-07-07 08:36 dax.net 阅读(1640) | 评论 (0) 编辑 |

摘要: 案例:一个简易的销售系统从现在开始,我们将以一个简易的销售系统为例,探讨EntityFramework在领域驱动设计上的应用。为了方便讨论,我们的销售系统非常简单,不会涉及客户存在多个收货地址的情况,也不会包含任何库存管理的内容。假设我们的系统只需要维护产品类型、产品以及客户信息,并能够帮客户下订单、跟踪订单状态,以及接受客户退货。从简单的分析我们大致可以了解到,这个系统将会有如下实体:客户、单据...阅读全文

posted @ 2010-07-07 08:32 dax.net 阅读(2293) | 评论 (17) 编辑 |

摘要: 分层架构在引入实例以前,我们有必要回顾,并进一步了解分层架构。“层”是一种体系结构模式[POSA1],也是被广大软件从业人员用得最为广泛而且最为灵活的模式之一。记得在CSDN上,时常有朋友问到:“分层是什么?为什么要分层?三层架构是不是就是表现层、业务逻辑层和数据访问层?” 到这里,你可能会觉得这些朋友的问题很简单,分层嘛,不就是将具有不同职责的组件...阅读全文

posted @ 2010-07-07 08:13 dax.net 阅读(2310) | 评论 (7) 编辑 |

摘要: 从DataTable到EntityObject虽然从技术角度讲,DataTable与EntityObject并没有什么可比性,然而,它暗示了一场革命正在悄然进行着,即使是微软,也摆脱不了这场革命的飓风。 软件设计思想需要革命,需要摆脱原有的思路,而走向面向领域的道路。你或许会觉得听起来很玄乎,然而目前软件开发的现状使你不得不接受这样的现实,仍然有大帮的从业人员成天扯着数据库不放,仍然有大帮的人在问...阅读全文

posted @ 2010-07-07 07:58 dax.net 阅读(2646) | 评论 (8) 编辑 |

摘要: 写在前面 其实这系列文章已经被很多网友转载过了,我自己也在前面的博客中给出了原文的链接。但毕竟博客园的人气更旺,加上不少网友强烈要求我把文章转贴到博客园,因此最终下定决心,将这系列文章重新整理并转贴在博客园上。 根据网友的讨论结果,以及自己在实践中的不断积累,在整理的过程中,我会将原文中的描述作相应调整。不仅如此,也有不少关心领域驱动设计的网友在原文的评论栏目中提了问题或作了批注,我也针对网友的问...阅读全文

posted @ 2010-07-07 07:56 dax.net 阅读(3500) | 评论 (6) 编辑 |

摘要: 去年年底我写了一系列文章,介绍领域驱动设计在Entity Framework中的应用。这些文章是我在CSAI的博客中发布的,也有不少网友对这个话题比较关注。时间关系,整个系列文章并没有能够写完,剩下还有几个话题没能发布出来。为了能够与更多的网友分享我的实践经验,今天特地将这些文章的链接列出来,供大家参考讨论。我没有将这些文章重新逐一发布在园区的一个重要原因是,很多网友已经在原文上做了评论,我也针对...阅读全文

posted @ 2010-04-21 08:27 dax.net 阅读(3311) | 评论 (19) 编辑 |

原文地址:https://www.cnblogs.com/Leo_wl/p/2042681.html