上一页 1 ··· 7 8 9 10 11 12 13 14 15 16 下一页
摘要: 领域仓储(Domain Repository)与事件存储(Event Store)是CQRS体系结构应用系统中C部分(Command部分)的重要组件。虽然都是存储机制,但两者有着本质的区别:领域仓储是属于领域层的,而事件仓储则是属于基础结构层的。领域模型产生事件,领域仓储负责保存、发布事件,并通过事件序列重塑领域模型。由于领域仓储的存在,使得“内存领域模型(In-memory Domain)”成为可能。在上文中我已经对对象的状态做了一些介绍,通过这些介绍我们能够了解到,在应用系统中,是领域事件导致了对象状态的变化,于是,我们只需要把这些领域事件按顺序记录下来,我们就有能力将领域模型还原到任何. 阅读全文
posted @ 2011-01-04 19:45 dax.net 阅读(6051) 评论(4) 推荐(2) 编辑
摘要: 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 阅读(3928) 评论(5) 推荐(3) 编辑
摘要: 从结构上看,tlibcqrs项目并不复杂,但对其进行介绍,的确让我感到有点无从着手。还是先从领域模型中的对象的行为和状态谈起吧。先来谈谈对象状态。据我理解,状态就是一种数据,它用来描述,在某个特定的时间上,这个对象所具有的特质,它将作为对象行为发生的依据和结果。我们平时做设计和编程的时候,尤其是在做数据访问层的时候,特别喜欢一些仅仅包含getter/setter属性的对象,以便调用方能够通过getter获得对象的状态,使用setter设置对象的状态。之前我也说明过,状态并非getter/setter属性,在OOP上,状态表现为“字段”(fields)。现在我们讨论的不是数据访问层的DAO,而是 阅读全文
posted @ 2010-12-22 13:04 dax.net 阅读(4130) 评论(22) 推荐(4) 编辑
摘要: 写在前面也许在阅读了上篇文章中我列出的那部分资料后,还是有很多朋友对领域驱动设计不了解。正如上文评论中有网友提到微软西班牙团队也做了一个面向领域的分布式应用系统架构的案例,地址是http://microsoftnlayerapp.codeplex.com/。在这个站点的首页上,又对领域驱动设计做了诠释,我觉得总结的很好,特地将其翻译成中文写在这里,供大家参考:DDD is much more than this!We're talking about complex apps…, all their business rules (Domain logic) are points th 阅读全文
posted @ 2010-12-15 10:29 dax.net 阅读(6275) 评论(13) 推荐(4) 编辑
摘要: 写在前面有段时间没有更新博客了,一方面因为工作繁忙,另一方面则是我最近一直在坚持设计和完善基于DDD的应用系统开发框架Apworks。读过我《领域驱动设计案例:Tiny Library》这一系列文章的朋友一定听说过Apworks框架,虽然这个框架至今仍未成熟到能够用在真正的系统开发上,但它已经实现了CQRS体系结构模式,已经可以用于软件架构设计的演示上了。从这一讲开始,我将逐步介绍如何采用CQRS架构实现Tiny Library的业务。你可能会听得烦了:又是Tiny Library,能不能换点别的?呵呵,我开始时想做一个简单的论坛出来,不过为了能让读者朋友在经典DDD实践和CQRS实践上做个对 阅读全文
posted @ 2010-12-14 15:17 dax.net 阅读(7025) 评论(15) 推荐(4) 编辑
摘要: 工作繁忙,很久没有更新博客了。下面言归正传,简单介绍一下Tiny Library的用户界面实现。如前所述,Tiny Library采用ASP.NET MVC框架实现了基于浏览器的用户界面。回顾一下《业务逻辑与系统结构》一文,从层次架构图中我们可以清楚地看到,用户界面层是通过WCF Services与系统交互的。为了快速简单地实现Tiny Library,我只是简单地使用了ASP.NET MVC,因... 阅读全文
posted @ 2010-11-18 16:49 dax.net 阅读(5885) 评论(7) 推荐(6) 编辑
摘要: 今天抽空将我写的与领域驱动设计有关的系列文章汇总于此,便于大家查看。根据撰写的进度,本列表会不定期更新,敬请关注! Entity Framework之领域驱动设计实践 EntityFramework之领域驱动设计实践 - 前言 EntityFramework之领域驱动设计实践 (一):从DataTa 阅读全文
posted @ 2010-11-02 17:39 dax.net 阅读(65375) 评论(74) 推荐(124) 编辑
摘要: Tiny Library使用应用服务层向用户界面层提供服务,具体实现是采用Microsoft WCF Services。在Tiny Library的解决方案中,是由TinyLibrary.Services项目为整个系统提供这一WCF服务的。按照传统的应用系统分层方法,TinyLibrary.Services项目位于领域模型层之上、用户界面层之下,它是UI与Domain的交互界面。TinyLibra... 阅读全文
posted @ 2010-11-02 08:11 dax.net 阅读(8080) 评论(11) 推荐(7) 编辑
摘要: 在领域驱动设计的案例中,仓储的设计是很具有争议性的话题,因为仓储这个角色本身就与领域模型和基础结构层对象相关,它需要序列化领域对象(应该说是聚合),然后将其保存到基础结构层的持久化机制。于是,在领域驱动设计的社区中,存在两种观点:1、领域模型不能访问仓储,理由是:仓储需要跟技术架构层打交道,在领域模型中访问仓储就会破坏领域模型的纯净度。需要使用仓储的,需要在领域模型上加上一层,比如Applicat... 阅读全文
posted @ 2010-10-28 20:27 dax.net 阅读(8860) 评论(11) 推荐(4) 编辑
摘要: 本讲主要介绍基于Entity Framework的领域驱动设计建模。首先回顾一下Tiny Library的业务逻辑: 任何用户可以添加Library中的图书(简化起见,图书不能修改也不能删除),也可以查看图书的详细信息 注册用户,也就是读者,可以借书、还书、查看自己借过的图书列表和借书信息 请注意上面描述的黑体部分,这些概念出现在Tiny Library的领域知识(Domain Knowle... 阅读全文
posted @ 2010-10-27 16:32 dax.net 阅读(16594) 评论(17) 推荐(5) 编辑
摘要: 之前我发布了领域驱动设计的一个实践案例:Tiny Library。本章介绍该案例实现的业务逻辑与系统结构设计。业务逻辑Tiny Library的业务逻辑非常简单,主要就是如下两条:任何用户可以添加Library中的图书(简化起见,图书不能修改也不能删除),也可以查看图书的详细信息 注册用户,也就是读者,可以借书、还书、查看自己借过的图书列表和借书信息篇幅有限,我就不在此将案例的操作过程一一截图了,... 阅读全文
posted @ 2010-10-20 08:13 dax.net 阅读(9831) 评论(20) 推荐(3) 编辑
摘要: 应广大网友的要求,我最近抽空基于ASP.NET MVC + WCF + Entity Framework做了一个案例,该案例以图书馆图书管理、读者借书、还书为业务背景,以领域驱动设计为思想指导,全程采用Microsoft技术进行实践,希望能够给Microsoft技术的狂热者以及领域驱动设计的学者提供实践参考。本案例选用的业务逻辑非常简单,所以项目取名上我选用了“Tiny Library... 阅读全文
posted @ 2010-10-18 07:58 dax.net 阅读(13993) 评论(27) 推荐(8) 编辑
摘要: 有很多网友对这三者(Entities, Domain Services以及Repositories)有着疑惑,之前我也在我们的领域驱动设计QQ群里,解答了大家的疑惑,现在大致整理一下,供更多朋友参考。 领域服务与实体具有同等的地位 有些网友认为,仓储的相关操作应该放到领域服务中,而不应该放在实体中。认为实体是负责领域概念表述与业务逻辑处理的,而领域服务则是负责一些周边的工作,比如与位于技术架构层... 阅读全文
posted @ 2010-09-21 22:05 dax.net 阅读(5910) 评论(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 阅读(1547) 评论(0) 推荐(0) 编辑
摘要: 今天在为我的新作Visual Benchmark做安装程序。为了简单起见,我选择了Visual Studio自带的Setup Project模板。当设置好所有选项以后,在编译安装程序的时候发生了Unrecoverable build error的错误。打开浏览器google,发现微软有篇文章介绍了解决方案。按着这篇文章实验,问题仍然没有解决。最后发现,连ole32.dll也需要regsvr32一下... 阅读全文
posted @ 2010-09-08 11:21 dax.net 阅读(1628) 评论(0) 推荐(0) 编辑
摘要: 在上一篇文章中,为了解决成员访问级别的问题,我采用了一个object adapter,使得客户程序无法轻易地修改对象的属性。网友评论说,我的这种做法就是绕了一圈,的确,这种方法没办法阻止客户程序刻意地去修改对象的属性,但在一定程度上起到了保护作用:至少降低了误操作的可能性。今天发现其实可以用System.Runtime.CompilerServices.InternalsVisibleToAttr... 阅读全文
posted @ 2010-08-12 08:25 dax.net 阅读(3221) 评论(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 阅读(1742) 评论(1) 推荐(1) 编辑
摘要: 是时候总结一下本系列文章了。还是应该自我批评一下,由于个人杂事多,加上工作繁忙,整个系列文章弄了大半年才断断续续写完。在撰写文章的过程中,也得到了大家的理解与支持,并让更多的朋友开始关注领域驱动设计,很是感激!在接下来的其它博文中,我将继续讨论领域驱动设计的实践经验。本系列文章首先从领域驱动设计的基础思想出发,讨论了基于.NET EntityFramework的领域驱动设计经验,这包括对实体、值对... 阅读全文
posted @ 2010-08-10 10:03 dax.net 阅读(9905) 评论(19) 推荐(21) 编辑
摘要: CQRS体系结构模式本文将对CQRS(Command Query Responsibility Segregation,命令查询职责分离)模式做一个相对全面的介绍。可以这么说,CQRS打破了经典的领域驱动设计实践,在应用CQRS的整个过程中,你将会以另一种不同的角度去考虑问题并寻求解决方案。比如,CQRS是事件驱动的体系结构,事件是如何产生如何分发又是如何处理的?事件驱动的体系结构适用于哪些类型的... 阅读全文
posted @ 2010-08-02 11:16 dax.net 阅读(20615) 评论(34) 推荐(22) 编辑
摘要: 服务(Services) 从本讲开始,所涉及的DDD话题可能与EntityFramework关系不大了。网友千万别骂我是标题党,呵呵。由于这部分内容并非是特定于EntityFramework的,更多的是在介绍模式及实践心得,所以EntityFramework的内容就会偏少了。为了使得针对一些话题的讨论能够延续下去,我仍然将这些文章安排在本系列中,希望读者朋友能够谅解。我也在标题中标注了【扩展阅读】... 阅读全文
posted @ 2010-07-27 11:59 dax.net 阅读(9701) 评论(12) 推荐(4) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 14 15 16 下一页