随笔分类 -  领域驱动设计

专注于领域驱动设计的研究与实践
摘要:何时使用领域驱动设计?其实当你的应用程序架构设计是面向业务的时候,你已经开始使用领域驱动设计了。领域驱动设计既不是架构风格(Architecture Style),也不是架构模式(Architecture Pattern),它也不是一种软件开发方法论,所以,是否应该使用领域驱动设计,以及什么时候使用 阅读全文
posted @ 2021-08-24 21:02 dax.net 阅读(5253) 评论(15) 推荐(49) 编辑
摘要:在《WeText项目:一个基于.NET实现的DDD、CQRS与微服务架构的演示案例》文章中,我介绍了自己用Visual Studio 2015(C# 6.0 with .NET Framework 4.6.1)开发的DDD/CQRS/微服务架构的案例项目:WeText。文章发出后反响很好,也很感谢大家的关注。在本文中我将介绍如何在Ubuntu 14.04.4 LTS中运行WeText项目的服务端。... 阅读全文
posted @ 2016-04-24 13:05 dax.net 阅读(3059) 评论(6) 推荐(11) 编辑
摘要:最近出于工作需要,了解了一下微服务架构(Microservice Architecture,MSA)。我经过两周业余时间的努力,凭着自己对微服务架构的理解,从无到有,基于.NET打造了一个演示微服务架构的应用程序案例,并结合领域驱动设计(DDD)以及命令查询职责分离(CQRS)体系结构模式,对事件驱动的微服务系统架构进行了一些实战性的探索。现将自己的思考和收获整理成文,分享给大家。 微服务架构 ... 阅读全文
posted @ 2016-04-22 16:37 dax.net 阅读(15763) 评论(39) 推荐(56) 编辑
摘要:在前面的章节中,我们已经设计了一个简单的领域模型,接下来我们希望能够实现领域模型的持久化及查询。在Apworks中,实现了面向Entity Framework、NHibernate以及MongoDB的仓储基础结构。在本章节中,我将向大家介绍如何在Apworks中使用基于Entity Framework的仓储机制。 搭建基于Entity Framework的基础结构 在使用Apworks提供的仓... 阅读全文
posted @ 2015-10-15 22:26 dax.net 阅读(6688) 评论(23) 推荐(13) 编辑
摘要:Apworks框架实战(一):Apworks到底是什么? Apworks框架实战(二):开始使用 Apworks框架实战(三):单元测试与持续集成 Apworks框架实战(四):使用Visual Studio开发面向经典分层架构的应用程序:从EasyMemo案例开始 Apworks框架实战(五):E 阅读全文
posted @ 2015-10-03 21:08 dax.net 阅读(10776) 评论(11) 推荐(9) 编辑
摘要:在上一讲中,我们已经新建了一个聚合根对象Account,并已经可以开始设计领域模型了。在这一讲中,我们会着重介绍EasyMemo领域模型的分析和设计,并引入Visual Studio Ultimate(旗舰版)版本的特性,介绍在Visual Studio 2013 Ultimate中如何使用体系结构建模工具进行领域模型设计,并自动化产生支持Apworks框架的代码。 界定上下文 由于EasyM... 阅读全文
posted @ 2015-10-03 20:54 dax.net 阅读(7701) 评论(31) 推荐(8) 编辑
摘要:时隔一年,继续我们的Apworks框架之旅。在接下来的文章中,我将逐渐向大家介绍如何在Visual Studio中结合Apworks框架,使用ASP.NET Web API和MVC来开发面向经典分层架构的应用程序。在这一讲中,我们首先了解一下分层架构的各个“层”,以及所涉及的Visual Studio项目,然后,我们从领域模型开始,在Visual Studio中开始我们的应用程序开发之旅。 说明... 阅读全文
posted @ 2015-10-02 11:40 dax.net 阅读(5946) 评论(14) 推荐(9) 编辑
摘要:Byteart Retail提供了相对简单的配置方式:对于应用程序中所需要的参数,都是通过web.config文件进行配置的。这一点与框架系统的配置不同。框架系统至少应该提供两种配置方式:直接编写代码的方式,以及web/app.config的方式,这是为了迎合不同的使用场景而设计的。因为作为一套框架而言,它为应用程序的正确运行提供了支撑平台,因此,它需要向开发者提供直接编写代码的配置方式,以迎合测... 阅读全文
posted @ 2013-05-29 10:17 dax.net 阅读(3769) 评论(9) 推荐(5) 编辑
摘要:部署这两天将Byteart Retail案例程序宿主到了Windows Azure虚拟主机上。基本步骤是:在Windows Azure管理器中,新建一台虚拟主机,我选择的配置是最高版本的Windows Server加上基本可以说是最烂的硬件配置: Windows Server:Windows Ser... 阅读全文
posted @ 2013-05-17 14:26 dax.net 阅读(2313) 评论(16) 推荐(1) 编辑
摘要:今天花了半天时间,向Byteart Retail案例加入了基于MongoDB的仓储实现,读者朋友可以直接从Byteart Retail的代码库克隆最新代码来使用基于MongoDB的仓储实现。 实现步骤 1、重构ByteartRetail.Domain.Repositories目录结构 本来这一步是不需要做的,但是因为之前没有把结构规划好,所以所有基于Entity Framework的仓储实现... 阅读全文
posted @ 2013-05-01 15:42 dax.net 阅读(4864) 评论(13) 推荐(3) 编辑
摘要:在我开发的《Byteart Retail》案例中,已经引入了领域事件(Domain Events)的实现部分,详情请见之前我写的一篇文章:《深度剖析Byteart Retail案例:领域事件(Domain Events)》。经过一段时间的学习和思考,对于领域事件的设计与实现也有了新的认识。在本文中,首先让我们一起了解一下Byteart Retail案例中领域事件的实现有哪些弊端,然后再对领域驱动设... 阅读全文
posted @ 2013-04-30 16:25 dax.net 阅读(9978) 评论(12) 推荐(5) 编辑
摘要:在领域驱动设计(DDD)的案例中,仓储及其上下文都是开发人员学习和讨论的重点。对这两个内容的讨论,大致包含两个方面:第一个方面是有关仓储及其上下文在整个应用程序架构中的位置;第二个方面,则是仓储及其上下文的设计与具体技术实现。我将在本文中,结合Byteart Retail案例,对这两个内容进行讨论。 仓储及其上下文在整个应用程序架构中的位置 仓储是DDD中管理对象生命周期的一个重要组件。在面向... 阅读全文
posted @ 2013-04-24 16:49 dax.net 阅读(15480) 评论(45) 推荐(31) 编辑
摘要:【本文翻译自Julie Lerman发表在MSDN Magazine上的一篇技术文章,原文题为《Shrink EF Models with DDD Bounded Contexts》。对自己英语比较自信的朋友可以直接在MSDN Magazine的在线文章收录中阅读原文。】 在使用Entity Framework(以下简称EF)来定义模型(Model)时,开发人员往往喜欢把应用程序中的所有模型对象... 阅读全文
posted @ 2013-03-22 20:31 dax.net 阅读(7686) 评论(32) 推荐(6) 编辑
摘要:本文将对AOP拦截在Byteart Retail中的应用进行分析和介绍,同时会介绍AOP两个应用的具体实现方式,即异常处理与缓存机制的实现。 背景 就一个企业级应用程序而言,实现它的主要目的就是为了解决企业生产过程中出现的实际问题,比如数据问题、管理问题等。因此,应用程序的核心部分就应该是与企业业务相关的部分,也就是我们平时经常提到的“领域模型”。在进行领域模型的建模过程中,根据领域驱动的经验... 阅读全文
posted @ 2013-02-22 20:25 dax.net 阅读(5916) 评论(17) 推荐(10) 编辑
摘要:为了便于阅读,我将该系列文章汇总于此,欢迎广大软件架构设计和领域驱动设计(DDD)的爱好者翻阅。此处的文章排序是根据整个项目的架构分层来的:首先是与基础结构层(Infrastructure)相关的话题,然后是领域层(Domain),再是应用层(Application)和表示层(Presentatio 阅读全文
posted @ 2013-01-05 15:49 dax.net 阅读(9409) 评论(32) 推荐(8) 编辑
摘要:当系统中的组件需要调用某一服务来完成特定的任务时,通常最简单的做法是使用new关键字来创建该服务的实例,或者通过工厂模式来解耦该组件与服务的具体实现部分,以便通过配置信息等更为灵活的方式获得该服务的实例。然而,这些做法都有着各自的弊端:在组件中直接维护对服务实例的引用,会造成组件与服务之间的关联依赖,当需要替换服务的具体实现时,不得不修改组件中调用服务的部分并重新编译解决方案;即使采用工厂模式来根据配置信息动态地获得服务的实例,也无法针对不同的服务类型向组件提供一个管理服务实例的中心位置由于组件与服务之间的这种关联依赖,使得项目的开发过程受到约束。在实际项目中,开发过程往往是并行的,但又不是完 阅读全文
posted @ 2013-01-05 15:37 dax.net 阅读(6133) 评论(15) 推荐(2) 编辑
摘要:在最近的一次代码签入中,Byteart Retail已经可以支持领域事件(Domain Events)的定义和处理了。在这篇文章中,我将详细介绍领域事件机制在Byteart Retail案例中的具体实现。在进行领域建模的时候,我们就已经知道保证领域模型纯净度的必要性。简而言之,领域模型中的各个对象都应该是POCO(POJO)对象,而不应向其添加任何与技术架构相关的内容。Udi Dahan曾经说过:“The main assertion being that you do *not* need to inject anything into your domain entities. Not s 阅读全文
posted @ 2012-12-27 20:19 dax.net 阅读(13866) 评论(29) 推荐(16) 编辑
摘要:背景Byteart Retail是一个面向领域驱动的.NET企业级应用架构设计案例,到目前为止已经发布了三个版本。有关这三个版本的详细介绍,请参考以下几个链接:V1:《EntityFramework之领域驱动设计实践【后续篇】:基于EF 4.3.1 Code First的领域驱动设计实践案例》V2:《Byteart Retail V2 - 基于Entity Framework Code First的领域驱动设计实践案例》V3:《Byteart Retail V3 - 全新的面向.NET与领域驱动设计的企业应用实践案例》为了向读者朋友详细介绍Byteart Retail项目,我打算写一个系列专题 阅读全文
posted @ 2012-11-13 15:59 dax.net 阅读(8949) 评论(21) 推荐(14) 编辑
摘要:经过近一个多月的努力,我使用自己的业余时间在V2的基础上对Byteart Retail案例重新打造,使得V3以一种全新的面貌出现在关注.NET企业级架构和领域驱动设计的读者朋友面前。与前两个版本相比,V3无论在界面上,还是在业务方面,甚至是技术方面都有了很大的进步。虽然系统完善了不少,但毕竟我没办法将全部时间精力都投入在这一开源项目上,所以V3肯定还存在不少缺陷,因此希望朋友们能够谅解,如果遇到问题,可以自己试着研究并动手解决,我想这样会对自己有很大的帮助。如果实在无法解决,或者有好的想法和建议,也欢迎在此留言与我联系。对Byteart Retail不太了解的朋友,可以点击下面的链接以了解前两 阅读全文
posted @ 2012-11-08 15:24 dax.net 阅读(10342) 评论(79) 推荐(34) 编辑
摘要:本文翻译自领域驱动设计官方网站的一篇实践性论文,原文题为《IAnticorruption – A Domain-Driven Design Approach To More Robust Integration》,我觉得这篇论文写得很不错,实践性非常强,通过对一个真实项目的研究,并结合整个团队在项目实践上的经验,总结了领域驱动设计在系统集成方面的指导作用:通过防腐层的引入,改善现有的系统集成架构,... 阅读全文
posted @ 2012-08-30 09:22 dax.net 阅读(13089) 评论(13) 推荐(16) 编辑