![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
软件设计
文章平均质量分 90
elysee2008
本人涉及JAVANETIOS等平台,现从事移动支付平台Android企业应用IOS应用windowphone应用OA办公系统开发定位系统等系统开发,涉及行业有电信网游移动平台企业应用项目管理等领域,擅长JavaEENETandroidwindowphoneIOS数据库及Web前端HTMLCSSJquery等开发。对系统架构设计领域驱动开发软件工程数据库开框架有浓厚兴趣。
展开
-
深度剖析Byteart Retail案例【领域事件】
在最近的一次代码签入中,Byteart Retail已经可以支持领域事件(Domain Events)的定义和处理了。在这篇文章中,我将详细介绍领域事件机制在Byteart Retail案例中的具体实现。在进行领域建模的时候,我们就已经知道保证领域模型纯净度的必要性。简而言之,领域模型中的各个对象都应该是POCO(POJO)对象,而不应向其添加任何与技术架构相关的内容。Udi Daha原创 2014-02-11 15:52:21 · 1661 阅读 · 0 评论 -
CQRS体系结构模式实践案例【Tiny Library简介】
写在前面有段时间没有更新博客了,一方面因为工作繁忙,另一方面则是我最近一直在坚持设计和完善基于DDD的应用系统开发框架Apworks。读过我《领域驱动设计案例:Tiny Library》这一系列文章的朋友一定听说过Apworks框架,虽然这个框架至今仍未成熟到能够用在真正的系统开发上,但它已经实现了CQRS体系结构模式,已经可以用于软件架构设计的演示上了。从这一讲开始,我将逐步介绍如何采用原创 2014-01-26 08:26:34 · 1603 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【仓储深入实现】
早在年前的时候就已经在CSAI博客发表了上一篇文章:《仓储的实现:基础篇》。苦于日夜奔波于工作与生活之间,一直没有能够抽空继续探讨仓储的实现细节,也让很多关注EntityFramework和领域驱动设计的朋友们备感失望。闲话不多说,现在继续考虑,如何让仓储的操作在相同的事物处理上下文中进行。DDD引入仓储模式,其目的之一就是能够通过仓储隐藏对象持久化的技术细节,使得领域模型变得更为“纯净”。由原创 2014-02-05 21:00:31 · 1885 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【仓储基本实现】
我们先从技术角度考虑仓储的问题。实体框架(EntityFramework)中,操作数据库是非常简单的:在ObjectContext中使用LINQ to Entities即可完成操作。开发人员也不需要为事务管理而操心,一切都由EF包办。与原本的ADO.NET以及LINQ to SQL相比,EF更为简单,LINQ to Entities的引入使得软件开发变得更为“领域化”。下面的代码测试了持久化一原创 2014-02-05 20:59:18 · 2510 阅读 · 0 评论 -
深度剖析Byteart Retail案例【服务定位器模式】
当系统中的组件需要调用某一服务来完成特定的任务时,通常最简单的做法是使用new关键字来创建该服务的实例,或者通过工厂模式来解耦该组件与服务的具体实现部分,以便通过配置信息等更为灵活的方式获得该服务的实例。然而,这些做法都有着各自的弊端:在组件中直接维护对服务实例的引用,会造成组件与服务之间的关联依赖,当需要替换服务的具体实现时,不得不修改组件中调用服务的部分并重新编译解决方案;即使采用原创 2014-02-07 09:06:39 · 1361 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【总结】
是时候总结一下本系列文章了。还是应该自我批评一下,由于个人杂事多,加上工作繁忙,整个系列文章弄了大半年才断断续续写完。在撰写文章的过程中,也得到了大家的理解与支持,并让更多的朋友开始关注领域驱动设计,很是感激!在接下来的其它博文中,我将继续讨论领域驱动设计的实践经验。本系列文章首先从领域驱动设计的基础思想出发,讨论了基于.NET EntityFramework的领域驱动设计经验,这包括对实体、原创 2014-02-06 09:36:02 · 1539 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【CQRS体系结构模式】
本文将对CQRS(Command Query Responsibility Segregation,命令查询职责分离)模式做一个相对全面的介绍。可以这么说,CQRS打破了经典的领域驱动设计实践,在应用CQRS的整个过程中,你将会以另一种不同的角度去考虑问题并寻求解决方案。比如,CQRS是事件驱动的体系结构,事件是如何产生如何分发又是如何处理的?事件驱动的体系结构适用于哪些类型的应用系统?CQRS中原创 2014-02-06 09:31:50 · 2408 阅读 · 0 评论 -
领域驱动设计案例【Tiny Library用户界面】
工作繁忙,很久没有更新博客了。下面言归正传,简单介绍一下Tiny Library的用户界面实现。如前所述,Tiny Library采用ASP.NET MVC框架实现了基于浏览器的用户界面。回顾一下《业务逻辑与系统结构》一文,从层次架构图中我们可以清楚地看到,用户界面层是通过WCF Services与系统交互的。为了快速简单地实现Tiny Library,我只是简单地使用了ASP.N原创 2014-01-26 08:21:20 · 1334 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【基于EF 4.3.1 设计实践】
两年前我在博客中发布了《EntityFramework之领域驱动设计实践》系列文章,也得到了广大读者朋友的关注,在完成了系列文章的总结之后,也一直没有这部分内容的更新了。现在,Entity Framework的稳定版(就是那个Stable的版本,不是Entity Framework 5的beta版本)4.3.1已经逐步应用到各种.NET项目中,为了演示Entity Framework 4.3.1原创 2014-02-06 09:33:04 · 1893 阅读 · 0 评论 -
深度剖析Byteart Retail案例【AOP异常处理与缓存】
本文将对AOP拦截在Byteart Retail中的应用进行分析和介绍,同时会介绍AOP两个应用的具体实现方式,即异常处理与缓存机制的实现。背景就一个企业级应用程序而言,实现它的主要目的就是为了解决企业生产过程中出现的实际问题,比如数据问题、管理问题等。因此,应用程序的核心部分就应该是与企业业务相关的部分,也就是我们平时经常提到的“领域模型”。在进行领域模型的建模过程中,根据领域驱动的经验原创 2014-02-07 09:10:40 · 1143 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【Byteart Retail V2】
在《EntityFramework之领域驱动设计实践【后续篇】:基于EF 4.3.1 Code First的领域驱动设计实践案例》一文中,我给出了一个基于Entity Framework 4.3.1 Code First的领域驱动设计实践案例:Byteart Retail。此案例得到了广大读者朋友的关注,也有很多网友针对案例中的各种实现技术进行提问,我也基本上一一回答了大家的疑问。为了能够更好原创 2014-02-06 09:35:11 · 1810 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【聚合】
聚合(Aggregate)是领域驱动设计中非常重要的一个概念。简单地说,聚合是这样一组领域对象(包括实体和值对象),这组领域对象联合起来表述一个完整的领域概念。比如,根据Eric Evans《领域驱动设计》一书中的例子,一辆车包含四个轮子,轮子离开“车”就毫无意义,此时这个联合体就是聚合,而“车”就是聚合根(Aggregate Root)。从实践中得知,并非领域模型中的每个实体都能够完整地表述原创 2014-01-31 01:19:31 · 3603 阅读 · 0 评论 -
Microsoft NLayerApp案例理论与实践【应用层】
NLayerApp中,在领域模型层之上是应用层与分布式服务(Distributed Services)部分。应用层主要负责接收来自客户端的请求数据,然后协调领域模型层与基础结构层组件完成语义上相对独立的任务;而分布式服务部分则为应用层与客户端之间提供通讯的接口和技术架构,严格地说它已经不具备任何任务处理的责任了,在整个应用程序中是一个可有可无的角色:对于ASP.NET Web应用程序而言,它只需要原创 2014-01-30 19:04:06 · 1314 阅读 · 0 评论 -
Microsoft NLayerApp案例理论与实践【DDD、分布式DDD及其分层】
这段时间一直在忙工作,已经有一个月没更新博客了。从现在开始,我将继续讨论Microsoft NLayerApp案例,希望各位爱好Microsoft NLayerApp案例、架构设计以及DDD的朋友们能够继续关注。从架构上看,Microsoft NLayerApp对“复杂的业务系统应用程序”这样一种应用程序的架构设计提供了一系列的设计准则。所谓“复杂的业务系统应用程序”是指这样一类业务系统应原创 2014-01-29 08:42:05 · 1923 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【规约Specification模式】
本来针对规约模式的讨论,我并没有想将其列入本系列文章,因为这是一种概念性的东西,从理论上讲,与EntityFramework好像扯不上关系。但应广大网友的要求,我决定还是在这里讨论一下规约模式,并介绍一种专门针对.NET Framework的规约模式实现。很多时候,我们都会看到类似下面的设计:隐藏行号 复制代码 ?Customer仓储的一种设计public inte原创 2014-02-05 21:01:28 · 2339 阅读 · 1 评论 -
深度剖析Byteart Retail案例【基于MongoDB的仓储实现】
今天花了半天时间,向Byteart Retail案例加入了基于MongoDB的仓储实现,读者朋友可以直接从Byteart Retail的代码库克隆最新代码来使用基于MongoDB的仓储实现。实现步骤1、重构ByteartRetail.Domain.Repositories目录结构本来这一步是不需要做的,但是因为之前没有把结构规划好,所以所有基于Entity Framew原创 2014-02-11 16:00:59 · 1541 阅读 · 0 评论 -
在Windows Azure虚拟主机上宿主Byteart Retail案例程序
这两天将Byteart Retail案例程序宿主到了Windows Azure虚拟主机上。基本步骤是:在Windows Azure管理器中,新建一台虚拟主机,我选择的配置是最高版本的Windows Server加上基本可以说是最烂的硬件配置: Windows Server:Windows Server 2012 Datacenter Edition 硬件配置:Small(1 c原创 2014-02-11 16:05:32 · 1130 阅读 · 0 评论 -
领域驱动设计中面向经典分层架构的领域事件的设计与实现
在我开发的《Byteart Retail》案例中,已经引入了领域事件(Domain Events)的实现部分,详情请见之前我写的一篇文章:深度剖析Byteart Retail案例【领域事件】。经过一段时间的学习和思考,对于领域事件的设计与实现也有了新的认识。在本文中,首先让我们一起了解一下Byteart Retail案例中领域事件的实现有哪些弊端,然后再对领域驱动设计中领域事件的设计与实现原创 2014-02-11 16:04:43 · 1689 阅读 · 0 评论 -
深度剖析Byteart Retail案例【仓储及其上下文】
在领域驱动设计(DDD)的案例中,仓储及其上下文都是开发人员学习和讨论的重点。对这两个内容的讨论,大致包含两个方面:第一个方面是有关仓储及其上下文在整个应用程序架构中的位置;第二个方面,则是仓储及其上下文的设计与具体技术实现。我将在本文中,结合Byteart Retail案例,对这两个内容进行讨论。仓储及其上下文在整个应用程序架构中的位置仓储是DDD中管理对象生命周期的一个重要组件原创 2014-02-11 15:54:23 · 1876 阅读 · 0 评论 -
介绍一款好用的基于.NET的配置文件设计工具
在进行框架开发的过程中,我们往往需要对配置文件的结构进行设计,以便产生一套完整的配置方案,供开发人员在使用框架时能对框架进行配置。对于某些大型的框架,其配置节点的结构可能相当复杂,比如某个配置节点(Configuration Element)可以有属性,还可以在其下挂载多个其它的配置节点或者多个配置节点集合(Configuration Element Collection)。如果使用手动编写代码的原创 2014-02-07 09:13:45 · 184 阅读 · 0 评论 -
深度剖析Byteart Retail案例【前言】
背景Byteart Retail是一个面向领域驱动的.NET企业级应用架构设计案例,到目前为止已经发布了三个版本。有关这三个版本的详细介绍,请参考以下几个链接:V1:EntityFramework之领域驱动设计实践【基于EF 4.3.1 设计实践】V2:EntityFramework之领域驱动设计实践【Byteart Retail V2】V3: 《为了向读者原创 2014-02-07 08:59:11 · 1321 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【从DataTable到EntityObject】
从DataTable到EntityObject虽然从技术角度讲,DataTable与EntityObject并没有什么可比性,然而,它暗示了一场革命正在悄然进行着,即使是微软,也摆脱不了这场革命的飓风。软件设计思想需要革命,需要摆脱原有的思路,而走向面向领域的道路。你或许会觉得听起来很玄乎,然而目前软件开发的现状使你不得不接受这样的现实,仍然有大帮的从业人员成天扯着数据库不放,仍然有大帮的原创 2014-01-30 19:16:10 · 2589 阅读 · 0 评论 -
Microsoft NLayerApp案例理论与实践【分布式服务】
Microsoft NLayerApp采用基于WCF的分布式服务组件为外界(各种类型的GUI)提供了访问接口,客户端程序只需要添加Service引用即可使用NLayerApp应用程序所提供的功能。在NLayerApp中,分布式服务部分的设计与结构还是比较简单的,主要包括DistributedServices.Core、DistributedServices.MainModule以及Distribu原创 2014-01-30 19:06:01 · 1340 阅读 · 0 评论 -
Microsoft NLayerApp案例理论与实践【基础结构层数据访问部分】
上篇文章讲解了NLayerApp案例的基础结构层(Cross-Cutting部分),现在,让我们继续解读NLayerApp的基础结构层(数据访问部分)。NLayerApp的基础结构层(数据访问部分)包含如下内容:Unit Of Work(PoEAA)、仓储的具体实现、NLayerApp的数据模型以及与测试相关的类。下面,我们将对前三个部分进行讨论,与测试相关的内容,我打算最后单独一章进行介绍。原创 2014-01-29 08:45:46 · 1631 阅读 · 1 评论 -
领域驱动设计案例【Tiny Library仓储】
在领域驱动设计的案例中,仓储的设计是很具有争议性的话题,因为仓储这个角色本身就与领域模型和基础结构层对象相关,它需要序列化领域对象(应该说是聚合),然后将其保存到基础结构层的持久化机制。于是,在领域驱动设计的社区中,存在两种观点:1、领域模型不能访问仓储,理由是:仓储需要跟技术架构层打交道,在领域模型中访问仓储就会破坏领域模型的纯净度。需要使用仓储的,需要在领域模型上加上一层,比如Applic原创 2014-01-25 13:59:20 · 1257 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【仓储】
上文中已经提到了管理领域模型对象生命周期的两大角色,即工厂与仓储,并对工厂的EntityFramework实践作了详细的描述。本节主要介绍仓储的概念,由于仓储的内容比较多,我将在接下来的两节中具体讲解仓储的架构设计与实践经验。仓储(Repository),顾名思义,就是一个仓库,这个仓库保存着领域模型的实体对象。在业务处理的过程中,我们有可能需要把正在参与处理过程的对象保存到仓储中,也有可能会原创 2014-02-05 20:57:36 · 2311 阅读 · 0 评论 -
深度剖析Byteart Retail案例【应用程序的配置】
Byteart Retail提供了相对简单的配置方式:对于应用程序中所需要的参数,都是通过web.config文件进行配置的。这一点与框架系统的配置不同。框架系统至少应该提供两种配置方式:直接编写代码的方式,以及web/app.config的方式,这是为了迎合不同的使用场景而设计的。因为作为一套框架而言,它为应用程序的正确运行提供了支撑平台,因此,它需要向开发者提供直接编写代码的配置方式,以迎合测原创 2014-02-07 09:12:27 · 1211 阅读 · 0 评论 -
Microsoft NLayerApp案例理论与实践【领域模型层】
本文将重点介绍Microsoft NLayerApp的领域模型层,这涉及到Domain.Core、Domain.Core.Entities、Domain.MainModule以及Domain.MainModule.Entities四个项目。Domain.Core项目包含了基本接口的定义以及规约模式(Specification Pattern)的实现;Domain.Core.Entities则包原创 2014-01-29 08:46:43 · 1628 阅读 · 0 评论 -
CQRS体系结构模式实践案例【Tiny Library系统架构】
写在前面也许在阅读了上篇文章中我列出的那部分资料后,还是有很多朋友对领域驱动设计不了解。正如上文评论中有网友提到微软西班牙团队也做了一个面向领域的分布式应用系统架构的案例,地址是http://microsoftnlayerapp.codeplex.com/。在这个站点的首页上,又对领域驱动设计做了诠释,我觉得总结的很好,特地将其翻译成中文写在这里,供大家参考:DDD i原创 2014-01-26 08:29:06 · 1323 阅读 · 0 评论 -
Microsoft NLayerApp案例理论与实践【简介与环境搭建】
项目简介Microsoft – Spain团队有一个很不错的“面向领域多层分布式项目”案例:Microsoft – Domain Oriented N-Layered .NET 4.0 App Sample(在本系列文章中,我使用NLayerApp作为该项目的名称进行介绍),在codeplex上的地址是:http://download.csdn.net/detail/zhixiang2010/原创 2014-01-28 08:53:23 · 1983 阅读 · 0 评论 -
使用Apworks开发基于CQRS架构的应用程序【运行应用程序】
启动WCF服务在TinyLibraryCQRS解决方案下,找到TinyLibrary.Services项目右键单击CommandService.svc,然后选择View in Browser,这将启动ASP.NET Development Server当ASP.NET Development Server成功启动,并在浏览器中打开了CommandService.svc后,将原创 2014-01-28 08:51:49 · 1181 阅读 · 0 评论 -
使用Apworks开发基于CQRS架构的应用程序【命令】
客户端程序通过命令告知系统“应该做什么”。事实上,这是一种单向的交互过程,客户端程序仅仅向领域模型发送命令请求,它们并不会通过领域模型来查询某些数据信息。在CQRS架构的应用程序中,“查询”是另一部分的内容,这将在接下来的章节中单独讨论。当应用服务器端接收到来自客户端的命令请求后,就会将这些命令推送到命令总线。命令处理器会侦听命令总线,并相应地处理命令请求。现在,让我们在TinyLibraryCQ原创 2014-01-27 08:35:02 · 1092 阅读 · 0 评论 -
使用Apworks开发基于CQRS架构的应用程序【领域事件】
根据wikipedia中关于“事件”的描述,“事件”可以被看成是“状态的一次变化”。例如:当一个客户购买了一台汽车,汽车的状态就从“待售”转变为“已售”。汽车销售系统则把这种状态的改变看成是一次事件的产生、发布、检测以及被更多其它应用程序所使用的过程。对于CQRS架构的应用程序而言,事件产生于领域模型,并由领域模型发布事件同时由领域模型首次捕获并处理,因此,我们称之为领域事件(Domain E原创 2014-01-27 08:33:13 · 1043 阅读 · 0 评论 -
使用Apworks开发基于CQRS架构的应用程序【创建领域模型项目】
领域模型是应用程序的核心,它包括了领域对象、状态、方法、事件、业务逻辑以及对象之间的关系。现在,我们来为Tiny Library CQRS创建一个领域模型项目。在 Solution Explorer 下,右键单击TinyLibraryCQRS项目,单击 Add | New Project… 菜单,这将打开 Add New Project 对话框在 Installed Templ原创 2014-01-27 08:27:23 · 1122 阅读 · 0 评论 -
使用Apworks开发基于CQRS架构的应用程序【前言】
在Apworks框架发布Alpha版本的时候,我已经针对其开发案例:Tiny Library CQRS写了Walkthrough文档,地址是:http://apworks.org/custom/documents/wlkthr_BuildAppsUsingApworks/。为了走国际化道路,这篇文章是全英文的,社区里有不少网友表示难以理解。趁着这几天不算很忙,我抽空将其又翻译回中文,并加入更多原创 2014-01-27 08:25:22 · 1275 阅读 · 0 评论 -
CQRS体系结构模式实践案例【Tiny Library对象的行为和状态】
从结构上看,tlibcqrs项目并不复杂,但对其进行介绍,的确让我感到有点无从着手。还是先从领域模型中的对象的行为和状态谈起吧。先来谈谈对象状态。据我理解,状态就是一种数据,它用来描述,在某个特定的时间上,这个对象所具有的特质,它将作为对象行为发生的依据和结果。我们平时做设计和编程的时候,尤其是在做数据访问层的时候,特别喜欢一些仅仅包含getter/setter属性的对象,以便调用方能够通过g原创 2014-01-26 08:30:27 · 1149 阅读 · 0 评论 -
领域驱动设计案例【Tiny Library简介】
应广大网友的要求,我最近抽空基于ASP.NET MVC + WCF + Entity Framework做了一个案例,该案例以图书馆图书管理、读者借书、还书为业务背景,以领域驱动设计为思想指导,全程采用Microsoft技术进行实践,希望能够给Microsoft技术的狂热者以及领域驱动设计的学者提供实践参考。本案例选用的业务逻辑非常简单,所以项目取名上我选用了“Tiny Library”,在后原创 2014-01-25 13:54:16 · 1834 阅读 · 0 评论 -
领域驱动设计案例【Tiny Library应用服务层】
Tiny Library使用应用服务层向用户界面层提供服务,具体实现是采用Microsoft WCF Services。在Tiny Library的解决方案中,是由TinyLibrary.Services项目为整个系统提供这一WCF服务的。按照传统的应用系统分层方法,TinyLibrary.Services项目位于领域模型层之上、用户界面层之下,它是UI与Domain的交互界面。TinyLibra原创 2014-01-25 14:01:04 · 1061 阅读 · 0 评论 -
领域驱动设计案例【Tiny Library领域模型】
本讲主要介绍基于Entity Framework的领域驱动设计建模。首先回顾一下Tiny Library的业务逻辑:任何用户可以添加Library中的图书(简化起见,图书不能修改也不能删除),也可以查看图书的详细信息注册用户,也就是读者,可以借书、还书、查看自己借过的图书列表和借书信息请注意上面描述的黑体部分,这些概念出现在Tiny Library的领域知识(Domain Kn原创 2014-01-25 13:59:03 · 1662 阅读 · 0 评论 -
领域驱动设计案例【Tiny Library业务逻辑与系统结构】
之前我发布了领域驱动设计的一个实践案例:Tiny Library。本章介绍该案例实现的业务逻辑与系统结构设计。 业务逻辑Tiny Library的业务逻辑非常简单,主要就是如下两条:任何用户可以添加Library中的图书(简化起见,图书不能修改也不能删除),也可以查看图书的详细信息注册用户,也就是读者,可以借书、还书、查看自己借过的图书列表和借书信息篇幅有限,我原创 2014-01-25 13:56:38 · 1612 阅读 · 0 评论