.NET编程
文章平均质量分 90
elysee2008
本人涉及JAVANETIOS等平台,现从事移动支付平台Android企业应用IOS应用windowphone应用OA办公系统开发定位系统等系统开发,涉及行业有电信网游移动平台企业应用项目管理等领域,擅长JavaEENETandroidwindowphoneIOS数据库及Web前端HTMLCSSJquery等开发。对系统架构设计领域驱动开发软件工程数据库开框架有浓厚兴趣。
展开
-
领域驱动设计中面向经典分层架构的领域事件的设计与实现
在我开发的《Byteart Retail》案例中,已经引入了领域事件(Domain Events)的实现部分,详情请见之前我写的一篇文章:深度剖析Byteart Retail案例【领域事件】。经过一段时间的学习和思考,对于领域事件的设计与实现也有了新的认识。在本文中,首先让我们一起了解一下Byteart Retail案例中领域事件的实现有哪些弊端,然后再对领域驱动设计中领域事件的设计与实现原创 2014-02-11 16:04:43 · 1671 阅读 · 0 评论 -
Microsoft NLayerApp案例理论与实践【基础结构层数据访问部分】
上篇文章讲解了NLayerApp案例的基础结构层(Cross-Cutting部分),现在,让我们继续解读NLayerApp的基础结构层(数据访问部分)。NLayerApp的基础结构层(数据访问部分)包含如下内容:Unit Of Work(PoEAA)、仓储的具体实现、NLayerApp的数据模型以及与测试相关的类。下面,我们将对前三个部分进行讨论,与测试相关的内容,我打算最后单独一章进行介绍。原创 2014-01-29 08:45:46 · 1612 阅读 · 1 评论 -
CQRS体系结构模式实践案例【Tiny Library系统架构】
写在前面也许在阅读了上篇文章中我列出的那部分资料后,还是有很多朋友对领域驱动设计不了解。正如上文评论中有网友提到微软西班牙团队也做了一个面向领域的分布式应用系统架构的案例,地址是http://microsoftnlayerapp.codeplex.com/。在这个站点的首页上,又对领域驱动设计做了诠释,我觉得总结的很好,特地将其翻译成中文写在这里,供大家参考:DDD i原创 2014-01-26 08:29:06 · 1316 阅读 · 0 评论 -
领域驱动设计案例【Tiny Library用户界面】
工作繁忙,很久没有更新博客了。下面言归正传,简单介绍一下Tiny Library的用户界面实现。如前所述,Tiny Library采用ASP.NET MVC框架实现了基于浏览器的用户界面。回顾一下《业务逻辑与系统结构》一文,从层次架构图中我们可以清楚地看到,用户界面层是通过WCF Services与系统交互的。为了快速简单地实现Tiny Library,我只是简单地使用了ASP.N原创 2014-01-26 08:21:20 · 1331 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【服务Services】
从本讲开始,所涉及的DDD话题可能与EntityFramework关系不大了。网友千万别骂我是标题党,呵呵。由于这部分内容并非是特定于EntityFramework的,更多的是在介绍模式及实践心得,所以EntityFramework的内容就会偏少了。为了使得针对一些话题的讨论能够延续下去,我仍然将这些文章安排在本系列中,希望读者朋友能够谅解。我也在标题中标注了【扩展阅读】,表示所讨论的内容已经不仅原创 2014-02-05 21:02:23 · 1443 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【仓储】
上文中已经提到了管理领域模型对象生命周期的两大角色,即工厂与仓储,并对工厂的EntityFramework实践作了详细的描述。本节主要介绍仓储的概念,由于仓储的内容比较多,我将在接下来的两节中具体讲解仓储的架构设计与实践经验。仓储(Repository),顾名思义,就是一个仓库,这个仓库保存着领域模型的实体对象。在业务处理的过程中,我们有可能需要把正在参与处理过程的对象保存到仓储中,也有可能会原创 2014-02-05 20:57:36 · 2297 阅读 · 0 评论 -
深度剖析Byteart Retail案例【AOP异常处理与缓存】
本文将对AOP拦截在Byteart Retail中的应用进行分析和介绍,同时会介绍AOP两个应用的具体实现方式,即异常处理与缓存机制的实现。背景就一个企业级应用程序而言,实现它的主要目的就是为了解决企业生产过程中出现的实际问题,比如数据问题、管理问题等。因此,应用程序的核心部分就应该是与企业业务相关的部分,也就是我们平时经常提到的“领域模型”。在进行领域模型的建模过程中,根据领域驱动的经验原创 2014-02-07 09:10:40 · 1135 阅读 · 0 评论 -
深度剖析Byteart Retail案例【服务定位器模式】
当系统中的组件需要调用某一服务来完成特定的任务时,通常最简单的做法是使用new关键字来创建该服务的实例,或者通过工厂模式来解耦该组件与服务的具体实现部分,以便通过配置信息等更为灵活的方式获得该服务的实例。然而,这些做法都有着各自的弊端:在组件中直接维护对服务实例的引用,会造成组件与服务之间的关联依赖,当需要替换服务的具体实现时,不得不修改组件中调用服务的部分并重新编译解决方案;即使采用原创 2014-02-07 09:06:39 · 1345 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【聚合】
聚合(Aggregate)是领域驱动设计中非常重要的一个概念。简单地说,聚合是这样一组领域对象(包括实体和值对象),这组领域对象联合起来表述一个完整的领域概念。比如,根据Eric Evans《领域驱动设计》一书中的例子,一辆车包含四个轮子,轮子离开“车”就毫无意义,此时这个联合体就是聚合,而“车”就是聚合根(Aggregate Root)。从实践中得知,并非领域模型中的每个实体都能够完整地表述原创 2014-01-31 01:19:31 · 3596 阅读 · 0 评论 -
Microsoft NLayerApp案例理论与实践【应用层】
NLayerApp中,在领域模型层之上是应用层与分布式服务(Distributed Services)部分。应用层主要负责接收来自客户端的请求数据,然后协调领域模型层与基础结构层组件完成语义上相对独立的任务;而分布式服务部分则为应用层与客户端之间提供通讯的接口和技术架构,严格地说它已经不具备任何任务处理的责任了,在整个应用程序中是一个可有可无的角色:对于ASP.NET Web应用程序而言,它只需要原创 2014-01-30 19:04:06 · 1297 阅读 · 0 评论 -
CQRS体系结构模式实践案例【Tiny Library简介】
写在前面有段时间没有更新博客了,一方面因为工作繁忙,另一方面则是我最近一直在坚持设计和完善基于DDD的应用系统开发框架Apworks。读过我《领域驱动设计案例:Tiny Library》这一系列文章的朋友一定听说过Apworks框架,虽然这个框架至今仍未成熟到能够用在真正的系统开发上,但它已经实现了CQRS体系结构模式,已经可以用于软件架构设计的演示上了。从这一讲开始,我将逐步介绍如何采用原创 2014-01-26 08:26:34 · 1596 阅读 · 0 评论 -
领域驱动设计案例【Tiny Library仓储】
在领域驱动设计的案例中,仓储的设计是很具有争议性的话题,因为仓储这个角色本身就与领域模型和基础结构层对象相关,它需要序列化领域对象(应该说是聚合),然后将其保存到基础结构层的持久化机制。于是,在领域驱动设计的社区中,存在两种观点:1、领域模型不能访问仓储,理由是:仓储需要跟技术架构层打交道,在领域模型中访问仓储就会破坏领域模型的纯净度。需要使用仓储的,需要在领域模型上加上一层,比如Applic原创 2014-01-25 13:59:20 · 1250 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【仓储深入实现】
早在年前的时候就已经在CSAI博客发表了上一篇文章:《仓储的实现:基础篇》。苦于日夜奔波于工作与生活之间,一直没有能够抽空继续探讨仓储的实现细节,也让很多关注EntityFramework和领域驱动设计的朋友们备感失望。闲话不多说,现在继续考虑,如何让仓储的操作在相同的事物处理上下文中进行。DDD引入仓储模式,其目的之一就是能够通过仓储隐藏对象持久化的技术细节,使得领域模型变得更为“纯净”。由原创 2014-02-05 21:00:31 · 1871 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【总结】
是时候总结一下本系列文章了。还是应该自我批评一下,由于个人杂事多,加上工作繁忙,整个系列文章弄了大半年才断断续续写完。在撰写文章的过程中,也得到了大家的理解与支持,并让更多的朋友开始关注领域驱动设计,很是感激!在接下来的其它博文中,我将继续讨论领域驱动设计的实践经验。本系列文章首先从领域驱动设计的基础思想出发,讨论了基于.NET EntityFramework的领域驱动设计经验,这包括对实体、原创 2014-02-06 09:36:02 · 1526 阅读 · 0 评论 -
VS2010中使用Modeling Project定制DSL以及自动化代码生成
从Visual Studio 2010开始,有一个Modeling Project的项目模板,允许应用程序设计人员通过该项目完成统一的UML模型设计。与Visual Studio 2008 DSLTools相比,通过Modeling Project创建出来的UML模型对象,能够被使用到各个不同的UML视图中,这一功能是由UML Model Explorer维护的。我们可以看到,相同的UML模型对象原创 2014-02-06 10:02:00 · 2274 阅读 · 0 评论 -
面向.NET与领域驱动设计的企业应用实践案例【Byteart Retail V3】
经过近一个多月的努力,我使用自己的业余时间在V2的基础上对Byteart Retail案例重新打造,使得V3以一种全新的面貌出现在关注.NET企业级架构和领域驱动设计的读者朋友面前。与前两个版本相比,V3无论在界面上,还是在业务方面,甚至是技术方面都有了很大的进步。虽然系统完善了不少,但毕竟我没办法将全部时间精力都投入在这一开源项目上,所以V3肯定还存在不少缺陷,因此希望朋友们能够谅解,如果遇到问原创 2014-02-07 09:01:47 · 2076 阅读 · 1 评论 -
深度剖析Byteart Retail案例【基于MongoDB的仓储实现】
今天花了半天时间,向Byteart Retail案例加入了基于MongoDB的仓储实现,读者朋友可以直接从Byteart Retail的代码库克隆最新代码来使用基于MongoDB的仓储实现。实现步骤1、重构ByteartRetail.Domain.Repositories目录结构本来这一步是不需要做的,但是因为之前没有把结构规划好,所以所有基于Entity Framew原创 2014-02-11 16:00:59 · 1537 阅读 · 0 评论 -
深度剖析Byteart Retail案例【仓储及其上下文】
在领域驱动设计(DDD)的案例中,仓储及其上下文都是开发人员学习和讨论的重点。对这两个内容的讨论,大致包含两个方面:第一个方面是有关仓储及其上下文在整个应用程序架构中的位置;第二个方面,则是仓储及其上下文的设计与具体技术实现。我将在本文中,结合Byteart Retail案例,对这两个内容进行讨论。仓储及其上下文在整个应用程序架构中的位置仓储是DDD中管理对象生命周期的一个重要组件原创 2014-02-11 15:54:23 · 1860 阅读 · 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 · 1122 阅读 · 0 评论 -
深度剖析Byteart Retail案例【领域事件】
在最近的一次代码签入中,Byteart Retail已经可以支持领域事件(Domain Events)的定义和处理了。在这篇文章中,我将详细介绍领域事件机制在Byteart Retail案例中的具体实现。在进行领域建模的时候,我们就已经知道保证领域模型纯净度的必要性。简而言之,领域模型中的各个对象都应该是POCO(POJO)对象,而不应向其添加任何与技术架构相关的内容。Udi Daha原创 2014-02-11 15:52:21 · 1635 阅读 · 0 评论 -
深度剖析Byteart Retail案例【前言】
背景Byteart Retail是一个面向领域驱动的.NET企业级应用架构设计案例,到目前为止已经发布了三个版本。有关这三个版本的详细介绍,请参考以下几个链接:V1:EntityFramework之领域驱动设计实践【基于EF 4.3.1 设计实践】V2:EntityFramework之领域驱动设计实践【Byteart Retail V2】V3: 《为了向读者原创 2014-02-07 08:59:11 · 1313 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【规约Specification模式】
本来针对规约模式的讨论,我并没有想将其列入本系列文章,因为这是一种概念性的东西,从理论上讲,与EntityFramework好像扯不上关系。但应广大网友的要求,我决定还是在这里讨论一下规约模式,并介绍一种专门针对.NET Framework的规约模式实现。很多时候,我们都会看到类似下面的设计:隐藏行号 复制代码 ?Customer仓储的一种设计public inte原创 2014-02-05 21:01:28 · 2315 阅读 · 1 评论 -
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 · 1793 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【从DataTable到EntityObject】
从DataTable到EntityObject虽然从技术角度讲,DataTable与EntityObject并没有什么可比性,然而,它暗示了一场革命正在悄然进行着,即使是微软,也摆脱不了这场革命的飓风。软件设计思想需要革命,需要摆脱原有的思路,而走向面向领域的道路。你或许会觉得听起来很玄乎,然而目前软件开发的现状使你不得不接受这样的现实,仍然有大帮的从业人员成天扯着数据库不放,仍然有大帮的原创 2014-01-30 19:16:10 · 2582 阅读 · 0 评论 -
Microsoft NLayerApp案例理论与实践【分布式服务】
Microsoft NLayerApp采用基于WCF的分布式服务组件为外界(各种类型的GUI)提供了访问接口,客户端程序只需要添加Service引用即可使用NLayerApp应用程序所提供的功能。在NLayerApp中,分布式服务部分的设计与结构还是比较简单的,主要包括DistributedServices.Core、DistributedServices.MainModule以及Distribu原创 2014-01-30 19:06:01 · 1323 阅读 · 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 · 1608 阅读 · 0 评论 -
介绍一款好用的基于.NET的配置文件设计工具
在进行框架开发的过程中,我们往往需要对配置文件的结构进行设计,以便产生一套完整的配置方案,供开发人员在使用框架时能对框架进行配置。对于某些大型的框架,其配置节点的结构可能相当复杂,比如某个配置节点(Configuration Element)可以有属性,还可以在其下挂载多个其它的配置节点或者多个配置节点集合(Configuration Element Collection)。如果使用手动编写代码的原创 2014-02-07 09:13:45 · 171 阅读 · 0 评论 -
EntityFramework之领域驱动设计实践【仓储基本实现】
我们先从技术角度考虑仓储的问题。实体框架(EntityFramework)中,操作数据库是非常简单的:在ObjectContext中使用LINQ to Entities即可完成操作。开发人员也不需要为事务管理而操心,一切都由EF包办。与原本的ADO.NET以及LINQ to SQL相比,EF更为简单,LINQ to Entities的引入使得软件开发变得更为“领域化”。下面的代码测试了持久化一原创 2014-02-05 20:59:18 · 2493 阅读 · 0 评论 -
深度剖析Byteart Retail案例【应用程序的配置】
Byteart Retail提供了相对简单的配置方式:对于应用程序中所需要的参数,都是通过web.config文件进行配置的。这一点与框架系统的配置不同。框架系统至少应该提供两种配置方式:直接编写代码的方式,以及web/app.config的方式,这是为了迎合不同的使用场景而设计的。因为作为一套框架而言,它为应用程序的正确运行提供了支撑平台,因此,它需要向开发者提供直接编写代码的配置方式,以迎合测原创 2014-02-07 09:12:27 · 1205 阅读 · 0 评论 -
使用Apworks开发基于CQRS架构的应用程序【应用程序的配置与编译】
Apworks使用配置文件来启动整个系统。在上文中也能够看出,WCF服务在启动时,同时也启动了Apworks系统。所以,本节简要介绍这个WCF服务针对Apworks的相关配置节内容。双击TinyLibrary.Services项目的web.config文件,根据下面的XML代码编辑该文件。 1: xml version="1.0"?> 2: configuration>原创 2014-01-28 08:48:04 · 1065 阅读 · 0 评论 -
使用Apworks开发基于CQRS架构的应用程序【配置数据库】
到目前为止,我们还未涉及任何数据库的配置工作。本章节将简单介绍基于Apworks的应用程序的数据库配置。在SQL Server中(目前的Apworks版本仅支持SQL Server)创建两个数据库:TinyLibraryEventDB和TinyLibraryQueryDB,然后分别执行如下SQL脚本:TinyLibraryEventDB 1: USE TinyLibra原创 2014-01-28 08:45:39 · 946 阅读 · 0 评论 -
使用Apworks开发基于CQRS架构的应用程序【创建.NET WCF服务】
在本节,我们将介绍.NET WCF服务的创建过程。在Solution Explorer中,右键单击TinyLibraryCQRS,然后选择Add | New Project…菜单,这将打开Add New Project对话框在Installed Templates 选项卡下,选择Visual C# | WCF,然后选择WCF Service Application,确保所选原创 2014-01-28 08:44:24 · 1047 阅读 · 0 评论 -
使用Apworks开发基于CQRS架构的应用程序【命令】
客户端程序通过命令告知系统“应该做什么”。事实上,这是一种单向的交互过程,客户端程序仅仅向领域模型发送命令请求,它们并不会通过领域模型来查询某些数据信息。在CQRS架构的应用程序中,“查询”是另一部分的内容,这将在接下来的章节中单独讨论。当应用服务器端接收到来自客户端的命令请求后,就会将这些命令推送到命令总线。命令处理器会侦听命令总线,并相应地处理命令请求。现在,让我们在TinyLibraryCQ原创 2014-01-27 08:35:02 · 1089 阅读 · 0 评论 -
使用Apworks开发基于CQRS架构的应用程序【领域事件】
根据wikipedia中关于“事件”的描述,“事件”可以被看成是“状态的一次变化”。例如:当一个客户购买了一台汽车,汽车的状态就从“待售”转变为“已售”。汽车销售系统则把这种状态的改变看成是一次事件的产生、发布、检测以及被更多其它应用程序所使用的过程。对于CQRS架构的应用程序而言,事件产生于领域模型,并由领域模型发布事件同时由领域模型首次捕获并处理,因此,我们称之为领域事件(Domain E原创 2014-01-27 08:33:13 · 1039 阅读 · 0 评论 -
使用Apworks开发基于CQRS架构的应用程序【创建领域模型项目】
领域模型是应用程序的核心,它包括了领域对象、状态、方法、事件、业务逻辑以及对象之间的关系。现在,我们来为Tiny Library CQRS创建一个领域模型项目。在 Solution Explorer 下,右键单击TinyLibraryCQRS项目,单击 Add | New Project… 菜单,这将打开 Add New Project 对话框在 Installed Templ原创 2014-01-27 08:27:23 · 1109 阅读 · 0 评论 -
使用Apworks开发基于CQRS架构的应用程序【前言】
在Apworks框架发布Alpha版本的时候,我已经针对其开发案例:Tiny Library CQRS写了Walkthrough文档,地址是:http://apworks.org/custom/documents/wlkthr_BuildAppsUsingApworks/。为了走国际化道路,这篇文章是全英文的,社区里有不少网友表示难以理解。趁着这几天不算很忙,我抽空将其又翻译回中文,并加入更多原创 2014-01-27 08:25:22 · 1272 阅读 · 0 评论 -
CQRS体系结构模式实践案例【Tiny Library对象的行为和状态】
从结构上看,tlibcqrs项目并不复杂,但对其进行介绍,的确让我感到有点无从着手。还是先从领域模型中的对象的行为和状态谈起吧。先来谈谈对象状态。据我理解,状态就是一种数据,它用来描述,在某个特定的时间上,这个对象所具有的特质,它将作为对象行为发生的依据和结果。我们平时做设计和编程的时候,尤其是在做数据访问层的时候,特别喜欢一些仅仅包含getter/setter属性的对象,以便调用方能够通过g原创 2014-01-26 08:30:27 · 1143 阅读 · 0 评论 -
领域驱动设计案例【Tiny Library应用服务层】
Tiny Library使用应用服务层向用户界面层提供服务,具体实现是采用Microsoft WCF Services。在Tiny Library的解决方案中,是由TinyLibrary.Services项目为整个系统提供这一WCF服务的。按照传统的应用系统分层方法,TinyLibrary.Services项目位于领域模型层之上、用户界面层之下,它是UI与Domain的交互界面。TinyLibra原创 2014-01-25 14:01:04 · 1055 阅读 · 0 评论 -
CQRS体系结构模式实践案例【Tiny Library领域仓储与事件存储】
领域仓储(Domain Repository)与事件存储(Event Store)是CQRS体系结构应用系统中C部分(Command部分)的重要组件。虽然都是存储机制,但两者有着本质的区别:领域仓储是属于领域层的,而事件仓储则是属于基础结构层的。领域模型产生事件,领域仓储负责保存、发布事件,并通过事件序列重塑领域模型。由于领域仓储的存在,使得“内存领域模型(In-memory Domain)”成为原创 2014-01-26 08:31:34 · 1320 阅读 · 0 评论 -
领域驱动设计案例【Tiny Library领域模型】
本讲主要介绍基于Entity Framework的领域驱动设计建模。首先回顾一下Tiny Library的业务逻辑:任何用户可以添加Library中的图书(简化起见,图书不能修改也不能删除),也可以查看图书的详细信息注册用户,也就是读者,可以借书、还书、查看自己借过的图书列表和借书信息请注意上面描述的黑体部分,这些概念出现在Tiny Library的领域知识(Domain Kn原创 2014-01-25 13:59:03 · 1656 阅读 · 0 评论