上一页 1 ··· 3 4 5 6 7 8 9 10 下一页
摘要: Tiny Library使用应用服务层向用户界面层提供服务,具体实现是采用Microsoft WCF Services。在Tiny Library的解决方案中,是由TinyLibrary.Services项目为整个系统提供这一WCF服务的。按照传统的应用系统分层方法,TinyLibrary.Services项目位于领域模型层之上、用户界面层之下,它是UI与Domain的交互界面。TinyLibra... 阅读全文
posted @ 2010-11-02 08:11 dax.net 阅读(8038) 评论(11) 推荐(7) 编辑
摘要: 在领域驱动设计的案例中,仓储的设计是很具有争议性的话题,因为仓储这个角色本身就与领域模型和基础结构层对象相关,它需要序列化领域对象(应该说是聚合),然后将其保存到基础结构层的持久化机制。于是,在领域驱动设计的社区中,存在两种观点:1、领域模型不能访问仓储,理由是:仓储需要跟技术架构层打交道,在领域模型中访问仓储就会破坏领域模型的纯净度。需要使用仓储的,需要在领域模型上加上一层,比如Applicat... 阅读全文
posted @ 2010-10-28 20:27 dax.net 阅读(8825) 评论(11) 推荐(4) 编辑
摘要: 本讲主要介绍基于Entity Framework的领域驱动设计建模。首先回顾一下Tiny Library的业务逻辑: 任何用户可以添加Library中的图书(简化起见,图书不能修改也不能删除),也可以查看图书的详细信息 注册用户,也就是读者,可以借书、还书、查看自己借过的图书列表和借书信息 请注意上面描述的黑体部分,这些概念出现在Tiny Library的领域知识(Domain Knowle... 阅读全文
posted @ 2010-10-27 16:32 dax.net 阅读(16554) 评论(17) 推荐(5) 编辑
摘要: 之前我发布了领域驱动设计的一个实践案例:Tiny Library。本章介绍该案例实现的业务逻辑与系统结构设计。业务逻辑Tiny Library的业务逻辑非常简单,主要就是如下两条:任何用户可以添加Library中的图书(简化起见,图书不能修改也不能删除),也可以查看图书的详细信息 注册用户,也就是读者,可以借书、还书、查看自己借过的图书列表和借书信息篇幅有限,我就不在此将案例的操作过程一一截图了,... 阅读全文
posted @ 2010-10-20 08:13 dax.net 阅读(9812) 评论(20) 推荐(3) 编辑
摘要: 应广大网友的要求,我最近抽空基于ASP.NET MVC + WCF + Entity Framework做了一个案例,该案例以图书馆图书管理、读者借书、还书为业务背景,以领域驱动设计为思想指导,全程采用Microsoft技术进行实践,希望能够给Microsoft技术的狂热者以及领域驱动设计的学者提供实践参考。本案例选用的业务逻辑非常简单,所以项目取名上我选用了“Tiny Library... 阅读全文
posted @ 2010-10-18 07:58 dax.net 阅读(13963) 评论(27) 推荐(8) 编辑
摘要: 有很多网友对这三者(Entities, Domain Services以及Repositories)有着疑惑,之前我也在我们的领域驱动设计QQ群里,解答了大家的疑惑,现在大致整理一下,供更多朋友参考。 领域服务与实体具有同等的地位 有些网友认为,仓储的相关操作应该放到领域服务中,而不应该放在实体中。认为实体是负责领域概念表述与业务逻辑处理的,而领域服务则是负责一些周边的工作,比如与位于技术架构层... 阅读全文
posted @ 2010-09-21 22:05 dax.net 阅读(5884) 评论(9) 推荐(4) 编辑
摘要: 出于Cross AppDomain Singleton模式的实现需要,我需要向我的Proxy Library中添加对mscoree.tlb的引用。但是当我从c:\windows\Microsoft.NET\Framework\v2.0.50727目录下选中这个文件的时候,Visual Studio提示,无法添加对mscoree.tlb的引用。一番尝试后,终不得正解。 最后,直接在c:\window... 阅读全文
posted @ 2010-09-09 10:10 dax.net 阅读(1540) 评论(0) 推荐(0) 编辑
摘要: 今天在为我的新作Visual Benchmark做安装程序。为了简单起见,我选择了Visual Studio自带的Setup Project模板。当设置好所有选项以后,在编译安装程序的时候发生了Unrecoverable build error的错误。打开浏览器google,发现微软有篇文章介绍了解决方案。按着这篇文章实验,问题仍然没有解决。最后发现,连ole32.dll也需要regsvr32一下... 阅读全文
posted @ 2010-09-08 11:21 dax.net 阅读(1592) 评论(0) 推荐(0) 编辑
摘要: 在上一篇文章中,为了解决成员访问级别的问题,我采用了一个object adapter,使得客户程序无法轻易地修改对象的属性。网友评论说,我的这种做法就是绕了一圈,的确,这种方法没办法阻止客户程序刻意地去修改对象的属性,但在一定程度上起到了保护作用:至少降低了误操作的可能性。今天发现其实可以用System.Runtime.CompilerServices.InternalsVisibleToAttr... 阅读全文
posted @ 2010-08-12 08:25 dax.net 阅读(3210) 评论(3) 推荐(0) 编辑
摘要: 在设计class library或者framework时有可能遇到这样的问题,或许有的朋友已经碰到过这样的问题了。比如,在实现CQRS体系结构模式时,我们通过Versioning和Branching的方式设计Event Sourcing的版本路线(Version Route),至于什么是Versioning和Branching,以及为何需要在Event Sourcing中引入Version Con... 阅读全文
posted @ 2010-08-10 15:39 dax.net 阅读(1734) 评论(1) 推荐(1) 编辑
摘要: 是时候总结一下本系列文章了。还是应该自我批评一下,由于个人杂事多,加上工作繁忙,整个系列文章弄了大半年才断断续续写完。在撰写文章的过程中,也得到了大家的理解与支持,并让更多的朋友开始关注领域驱动设计,很是感激!在接下来的其它博文中,我将继续讨论领域驱动设计的实践经验。本系列文章首先从领域驱动设计的基础思想出发,讨论了基于.NET EntityFramework的领域驱动设计经验,这包括对实体、值对... 阅读全文
posted @ 2010-08-10 10:03 dax.net 阅读(9877) 评论(19) 推荐(21) 编辑
摘要: CQRS体系结构模式本文将对CQRS(Command Query Responsibility Segregation,命令查询职责分离)模式做一个相对全面的介绍。可以这么说,CQRS打破了经典的领域驱动设计实践,在应用CQRS的整个过程中,你将会以另一种不同的角度去考虑问题并寻求解决方案。比如,CQRS是事件驱动的体系结构,事件是如何产生如何分发又是如何处理的?事件驱动的体系结构适用于哪些类型的... 阅读全文
posted @ 2010-08-02 11:16 dax.net 阅读(20541) 评论(34) 推荐(22) 编辑
摘要: 服务(Services) 从本讲开始,所涉及的DDD话题可能与EntityFramework关系不大了。网友千万别骂我是标题党,呵呵。由于这部分内容并非是特定于EntityFramework的,更多的是在介绍模式及实践心得,所以EntityFramework的内容就会偏少了。为了使得针对一些话题的讨论能够延续下去,我仍然将这些文章安排在本系列中,希望读者朋友能够谅解。我也在标题中标注了【扩展阅读】... 阅读全文
posted @ 2010-07-27 11:59 dax.net 阅读(9671) 评论(12) 推荐(4) 编辑
摘要: 网上有很多关于权限管理系统的设计方案以及案例,甚至有相关的可以直接使用的权限管理框架。权限管理并非我的研究对象,我也只通皮毛,今天就在专家面前班门弄斧,简单介绍一下微软Dynamics AX系统的权限管理,以及由此派生出来的一种基于.NET的权限设计思想。或许在看完本文后,你会觉得,我所提出的这个想法很火星,你早就知道这种方案了。不要紧,就当我在此将这些内容整理一下,以备日后参考便是了。演练:体验... 阅读全文
posted @ 2010-07-20 11:00 dax.net 阅读(8879) 评论(17) 推荐(4) 编辑
摘要: 规约(Specification)模式本来针对规约模式的讨论,我并没有想将其列入本系列文章,因为这是一种概念性的东西,从理论上讲,与EntityFramework好像扯不上关系。但应广大网友的要求,我决定还是在这里讨论一下规约模式,并介绍一种专门针对.NET Framework的规约模式实现。很多时候,我们都会看到类似下面的设计:隐藏行号 复制代码 ? Customer仓储的一种设计 接下来的一... 阅读全文
posted @ 2010-07-19 16:12 dax.net 阅读(23367) 评论(65) 推荐(32) 编辑
摘要: 仓储的实现:深入篇早在年前的时候就已经在CSAI博客发表了上一篇文章:《仓储的实现:基础篇》。苦于日夜奔波于工作与生活之间,一直没有能够抽空继续探讨仓储的实现细节,也让很多关注EntityFramework和领域驱动设计的朋友们备感失望。闲话不多说,现在继续考虑,如何让仓储的操作在相同的事物处理上下文中进行。DDD引入仓储模式,其目的之一就是能够通过仓储隐藏对象持久化的技术细节,使得领域模型变得更... 阅读全文
posted @ 2010-07-10 08:52 dax.net 阅读(17498) 评论(38) 推荐(12) 编辑
摘要: 仓储的实现:基本篇我们先从技术角度考虑仓储的问题。实体框架(EntityFramework)中,操作数据库是非常简单的:在ObjectContext中使用LINQ to Entities即可完成操作。开发人员也不需要为事务管理而操心,一切都由EF包办。与原本的ADO.NET以及LINQ to SQL相比,EF更为简单,LINQ to Entities的引入使得软件开发变得更为“领域化&... 阅读全文
posted @ 2010-07-07 12:51 dax.net 阅读(23913) 评论(26) 推荐(16) 编辑
摘要: 模型对象的生命周期 - 仓储 上文中已经提到了管理领域模型对象生命周期的两大角色,即工厂与仓储,并对工厂的EntityFramework实践作了详细的描述。本节主要介绍仓储的概念,由于仓储的内容比较多,我将在接下来的两节中具体讲解仓储的架构设计与实践经验。 仓储(Repository),顾名思义,就是一个仓库,这个仓库保存着领域模型的实体对象。在业务处理的过程中,我们有可能需要把正在参与处理过程... 阅读全文
posted @ 2010-07-07 09:43 dax.net 阅读(22910) 评论(22) 推荐(13) 编辑
摘要: 模型对象的生命周期 - 工厂首先应该认识到,是对象就有生命周期。这一点无论在面向对象语言还是在领域驱动设计中都适用。在领域驱动设计中,模型对象生命周期可以简要地用下图表示: 通过上图可以看到,对象通过工厂从无到有创建,创建后处于活动状态,此时可以参与领域层的业务处理;对象通过仓储实现持久化(也就是我们常说的“保存”)和重建(也就是我们常说的“读取”)... 阅读全文
posted @ 2010-07-07 09:15 dax.net 阅读(18026) 评论(12) 推荐(5) 编辑
摘要: 聚合聚合(Aggregate)是领域驱动设计中非常重要的一个概念。简单地说,聚合是这样一组领域对象(包括实体和值对象),这组领域对象联合起来表述一个完整的领域概念。比如,根据Eric Evans《领域驱动设计》一书中的例子,一辆车包含四个轮子,轮子离开“车”就毫无意义,此时这个联合体就是聚合,而“车”就是聚合根(Aggregate Root)。 从实... 阅读全文
posted @ 2010-07-07 09:01 dax.net 阅读(24792) 评论(36) 推荐(16) 编辑
摘要: 存储过程 - 领域驱动的反模式EntityFramework(EF)中有一项功能,就是能够根据数据库中的存储过程生成实体的行为(或称方法,以下统称方法)。我在本系列的第一篇博文中就已经提到,这种做法并不可取!因为存储过程是技术架构中的内容,而我们所关注的却是领域模型。Andrey Yemelyanov在其“Using ADO.NET EF in DDD: A Pattern Appro... 阅读全文
posted @ 2010-07-07 08:36 dax.net 阅读(19300) 评论(6) 推荐(7) 编辑
摘要: 案例:一个简易的销售系统从现在开始,我们将以一个简易的销售系统为例,探讨EntityFramework在领域驱动设计上的应用。为了方便讨论,我们的销售系统非常简单,不会涉及客户存在多个收货地址的情况,也不会包含任何库存管理的内容。假设我们的系统只需要维护产品类型、产品以及客户信息,并能够帮客户下订单、跟踪订单状态,以及接受客户退货。从简单的分析我们大致可以了解到,这个系统将会有如下实体:客户、单据... 阅读全文
posted @ 2010-07-07 08:32 dax.net 阅读(28543) 评论(46) 推荐(11) 编辑
摘要: 分层架构在引入实例以前,我们有必要回顾,并进一步了解分层架构。“层”是一种体系结构模式[POSA1],也是被广大软件从业人员用得最为广泛而且最为灵活的模式之一。记得在CSDN上,时常有朋友问到:“分层是什么?为什么要分层?三层架构是不是就是表现层、业务逻辑层和数据访问层?” 到这里,你可能会觉得这些朋友的问题很简单,分层嘛,不就是将具有不同职责的组件... 阅读全文
posted @ 2010-07-07 08:13 dax.net 阅读(40053) 评论(33) 推荐(37) 编辑
摘要: 从DataTable到EntityObject虽然从技术角度讲,DataTable与EntityObject并没有什么可比性,然而,它暗示了一场革命正在悄然进行着,即使是微软,也摆脱不了这场革命的飓风。 软件设计思想需要革命,需要摆脱原有的思路,而走向面向领域的道路。你或许会觉得听起来很玄乎,然而目前软件开发的现状使你不得不接受这样的现实,仍然有大帮的从业人员成天扯着数据库不放,仍然有大帮的人在问... 阅读全文
posted @ 2010-07-07 07:58 dax.net 阅读(32662) 评论(38) 推荐(32) 编辑
摘要: 写在前面 其实这系列文章已经被很多网友转载过了,我自己也在前面的博客中给出了原文的链接。但毕竟博客园的人气更旺,加上不少网友强烈要求我把文章转贴到博客园,因此最终下定决心,将这系列文章重新整理并转贴在博客园上。 根据网友的讨论结果,以及自己在实践中的不断积累,在整理的过程中,我会将原文中的描述作相应调整。不仅如此,也有不少关心领域驱动设计的网友在原文的评论栏目中提了问题或作了批注,我也针对网友的问... 阅读全文
posted @ 2010-07-07 07:56 dax.net 阅读(24670) 评论(17) 推荐(19) 编辑
摘要: 今天一早上google,发现主页上google的logo变成了吃豆子的游戏画面,google提供了一个Insert Coin的按钮,点击这个按钮即可开始吃豆子游戏。这也是为了纪念该游戏诞生30周年。小的时候,在任天堂红白机上,这是一款非常受欢迎的游戏。虽然现在看来很简单,画面也很枯燥,但它是一个时代的代表,见证了电视/电脑游戏的发展历程。 阅读全文
posted @ 2010-05-22 08:42 dax.net 阅读(1307) 评论(3) 推荐(1) 编辑
摘要: 去年年底我写了一系列文章,介绍领域驱动设计在Entity Framework中的应用。这些文章是我在CSAI的博客中发布的,也有不少网友对这个话题比较关注。时间关系,整个系列文章并没有能够写完,剩下还有几个话题没能发布出来。为了能够与更多的网友分享我的实践经验,今天特地将这些文章的链接列出来,供大家参考讨论。我没有将这些文章重新逐一发布在园区的一个重要原因是,很多网友已经在原文上做了评论,我也针对... 阅读全文
posted @ 2010-04-21 08:27 dax.net 阅读(8593) 评论(21) 推荐(11) 编辑
摘要: 在Microsoft Dynamics AX的MorphX中,AOT下有个Maps节点(注意,不是Map Class),这个节点下罗列了所有的Table Mapping。很多开发人员对于Table Mapping的概念不是很清楚,在使用过程中也会遇到一些问题。本文简单地收集并罗列一下。一、Table Mapping也是Table在AOT上,任意选择一个Table Map,单击鼠标右键选择Open,... 阅读全文
posted @ 2010-04-01 11:28 dax.net 阅读(2967) 评论(2) 推荐(0) 编辑
摘要: 今天在AspDotNetStorefront做定制化开发,编译的时候莫名其妙地报告Could not load file or assembly 'App_Licenses, Version=0.0.0.0, Culture=neutral, ... (Exception from HRESULT: 0x80070057 (E_INVALIDARG))的错误,检查文件系统,发现文件还在,然后查看文... 阅读全文
posted @ 2010-03-29 15:10 dax.net 阅读(1821) 评论(0) 推荐(1) 编辑
摘要: 这个题目想了半天,不太好用一句话描述。这样,举个简单的应用场景:在用Windows Forms制作向导程序的时候,通常会有“上一步”、“下一步”这样的按钮。假设现在需要做一个通用的“向导制作框架”,那么我们就需要在这个“向导制作框架”中,对“上一步”、“下一步&rdq... 阅读全文
posted @ 2010-03-19 14:45 dax.net 阅读(5142) 评论(9) 推荐(4) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 下一页