上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 16 下一页
摘要: 在以前的Apworks框架中,Apworks的核心组件(Apworks.dll)定义了所有与仓储/仓储上下文相关的接口,而在另外的程序集中,实现了这些接口并提供了针对某个ORM框架的仓储/仓储上下文的具体实现。当然,目前我也只是开发了针对NHibernate的仓储实现,也就是那个Apworks.Repositories.NHibernate程序集。这样做的目的,就是为了使得Apworks的核心组件能够脱离具体的第三方组件而独立存在,避免由于第三方组件存在的缺陷而导致核心组件需要频繁更新。这种做法参考了Martin Fowler在其PoEAA一书中描述的Separated Interface模式 阅读全文
posted @ 2012-03-01 11:03 dax.net 阅读(2621) 评论(2) 推荐(4) 编辑
摘要: .NET 4.0中的Task Parallel Library(TPL)已经不是什么新鲜事了,相信很多朋友也阅读过不少有关TPL的书籍资料。而另一方面,能够将TPL合理地运用在实际项目开发过程中,以提高程序的执行效率,这种情况也并不多见。本文就以实际项目中的一个程序功能为例,简要讨论一下TPL的应用。在此我不打算对TPL的相关基础知识做过多讨论,这些内容在网上应该有不少的文章资料可供参考;同时读者朋友还可以阅读一些有关TPL的经典书籍,以便加深对TPL的理解。文章最后我会推荐几本不错的有关.NET 4.0下TPL的书籍资料。案例:批量对象的XML序列化在某个项目中,需要对一大批相同类型的对象进 阅读全文
posted @ 2012-02-16 18:14 dax.net 阅读(5924) 评论(11) 推荐(3) 编辑
摘要: 前文回顾:在Visual Studio 2010中创建多项目(解决方案)模板【一】:多项目解决方案模板的创建在Visual Studio 2010中创建多项目(解决方案)模板【二】:Template Wizard的使用本文主要讨论多项目(解决方案)模板的部署相关问题,包括:为多项目解决方案模板设置模板名称修改多项目解决方案模板的图标创建Visual Studio 2010扩展的安装包VSIX文件为多项目解决方案模板设置模板名称模板名称的设置非常简单,,只需要修改CMSProjectTemplate.vstemplate文件中的Name XML节点的内容即可。例如,我们可以为我们的模板起名为:C 阅读全文
posted @ 2012-01-19 14:43 dax.net 阅读(5227) 评论(7) 推荐(4) 编辑
摘要: 在上文中我给大家介绍了多项目解决方案模板的创建,在文章的最后我们遇到了一个问题,就是$safeprojectname$这个模板参数(宏)所指代的意义在各个项目中都不一样,而我们却希望它能够简单地指代用户所输入的项目名称。本文将从这个问题出发,讨论在Visual Studio 2010中是如何使用Template Wizard来设计复杂的多项目解决方案的。Template Wizard的基本应用创建Template Wizard项目在CMSProjectTemplate解决方案下,新建一个C# Class Library,取名为CMSProjectTemplateWizard,在该项目上添加Mi 阅读全文
posted @ 2012-01-18 20:17 dax.net 阅读(11521) 评论(17) 推荐(5) 编辑
摘要: 当我们使用Visual Studio来新建某个项目(Project)时,通常都会使用File –> New –> Project菜单来打开New Project(新建项目)对话框,里面列出了各种项目类型以供我们选择。大部分读者朋友都应该知道,这个对话框其实是列出了所有已经安装的项目模板,不仅如此,Visual Studio还允许用户通过File –> Export Template菜单将现有的项目导出为项目模板。平时我们最为常见的是使用Export Template来创建单一项目的项目模板,此时使用Export Template功能就十分有效。当然,社区里也有一些工具(比如微 阅读全文
posted @ 2012-01-17 19:21 dax.net 阅读(20927) 评论(27) 推荐(10) 编辑
摘要: 聚合以及聚合根是领域驱动设计中的重要概念,根据定义,聚合是针对数据变化可以考虑成一个单元的一组相关的对象。聚合使用边界将内部和外部的对象划分开来。每个聚合有一个根。这个根是一个实体,并且它是外部可以访问的唯一的对象。根可以保持对任意聚合对象的引用,并且其他的对象可以持有任意其他的对象,但一个外部对象只能持有根对象的引用。如果边界内有其他的实体,那些实体的标识符是本地化的,只在聚合内有意义(参见《领域驱动设计-精简版》第42页)。从定义上看,貌似针对特定上下文的领域模型来讲,聚合的划分与设计并不那么困难,但事实却并非如此。在本文中,我将大致总结一下自己的经验,同时也欢迎关注领域驱动设计的朋友能够 阅读全文
posted @ 2011-12-24 10:00 dax.net 阅读(12140) 评论(33) 推荐(11) 编辑
摘要: 今应博客园网友sula的邀请,参加了2011年度51CTO的IT博客大赛,如果有朋友对我的博客感兴趣的话,欢迎点击此处为我投票,我也将再接再厉,把更优秀精彩的内容展现给读者朋友。 阅读全文
posted @ 2011-11-25 10:12 dax.net 阅读(695) 评论(1) 推荐(0) 编辑
摘要: 在上文我大概介绍了一下打算实现一个《魂斗罗》的游戏,以及在实现过程中使用的自己开发的工具,文章最后给出了一个演示,可以看到我们已经可以通过键盘控制主角的各种动作了。今天继续分享这两天我的收获,这包括背景部分的使用以及通过引入一些简单的物理定理来实现跳跃的动作。我在游戏开发方面也还只是刚刚起步,或许我的这些做法和想法方向根本就是错的,不过我还是共享出来,希望得到专家的指点,同时也希望能给需要的朋友提供参考。背景背景的资源是从网上下载的,与红白机相关的游戏的资源可以在http://www.nes-snes-sprites.com/站点下载。考虑到在真正的游戏中,当主角移动到屏幕靠近中心位置时,如果 阅读全文
posted @ 2011-11-16 14:23 dax.net 阅读(2270) 评论(13) 推荐(6) 编辑
摘要: 早段时间闲着无聊上了上优酷,无意中看到了一些音乐大牛们使用各种乐器弹奏红白机《魂斗罗》游戏的背景音乐(对于不知道《魂斗罗》这款游戏的朋友我只能表示无语了),有些Remix版本的音乐听到热血沸腾,不禁又回忆起小时候去同学家里打爆机的美好时光。一时间头脑发热,凭着自己的兴趣打算使用Microsoft Xna来重新打造《魂斗罗》第一代游戏第一关Jungle Juncture。不过嘛,由于之前没有游戏开发... 阅读全文
posted @ 2011-11-11 13:50 dax.net 阅读(3032) 评论(21) 推荐(7) 编辑
摘要: Microsoft .NET为应用程序开发人员提供了丰富的处理配置数据的编程模型与类型库。拥有这些组件,开发人员及用户可以方便地在无需重新编译应用程序的情形下,通过对配置数据的设置,对应用程序的执行行为与结果进行干预,从而使得相同的应用程序能够在不改变源程序的情况下,满足不同应用场景的特殊需求。就应用程序框架而言,在大多数情况下,开发人员也需要能够对其进行配置,以便获得不同的框架功能特性。比如,我... 阅读全文
posted @ 2011-10-03 15:41 dax.net 阅读(6500) 评论(7) 推荐(5) 编辑
摘要: 在进行框架开发的过程中,我们往往需要对配置文件的结构进行设计,以便产生一套完整的配置方案,供开发人员在使用框架时能对框架进行配置。对于某些大型的框架,其配置节点的结构可能相当复杂,比如某个配置节点(Configuration Element)可以有属性,还可以在其下挂载多个其它的配置节点或者多个配置节点集合(Configuration Element Collection)。如果使用手动编写代码的... 阅读全文
posted @ 2011-09-16 10:44 dax.net 阅读(6861) 评论(4) 推荐(9) 编辑
摘要: Apworks是一套基于.NET的面向领域驱动的企业级应用系统开发框架,开发人员可以使用Apworks方便地在项目中应用经典的分层架构(Classic Layered Architecture)模式或命令查询职责分离(CQRS)架构模式。经过我9个月的努力,Apworks已经从去年年底发布的具有有限功能的预览版(Alpha版)发展到现在能够支持实际项目开发的2.0稳定版,如今该稳定版已经发布到co... 阅读全文
posted @ 2011-09-15 12:26 dax.net 阅读(4863) 评论(22) 推荐(4) 编辑
摘要: 在上一篇文章中,我给出了一个完整的CQRS架构的演示案例:Tiny Library CQRS。本文将介绍该案例中AOP拦截的实现方式,以及基于AOP拦截的异常处理。由于Tiny Library CQRS是基于Apworks框架开发的CQRS架构案例,因此通过本文你也将了解到,如何配置Apworks框架以便在自己的实际项目中使用AOP拦截和异常处理。实现AOP拦截如上所述,Tiny Library CQRS利用了Apworks框架实现AOP拦截,那么首先来了解一下Apworks支持AOP拦截的方式。Apworks采用Castle DynamicProxy实现AOP拦截,因此针对AOP拦截部分的开 阅读全文
posted @ 2011-09-07 10:26 dax.net 阅读(4814) 评论(8) 推荐(2) 编辑
摘要: 如果您不了解CQRS架构中各个系统或组件是如何组织在一起并协调工作的,或者您不了解CQRS架构中事件溯源、快照、领域仓储、消息派发、消息同步等是如何实现的,或者您甚至不了解什么是领域驱动设计、什么是事件驱动架构(Event-Driven Architecture)以及什么是CQRS架构(Command-Query Responsibility Segregation Architecture),那么本文,以及Tiny Library CQRS实践案例,就是您正需要的。Tiny Library CQRS(http://tlibcqrs.codeplex.com)是基于.NET与Apworks(h 阅读全文
posted @ 2011-09-01 13:52 dax.net 阅读(5507) 评论(18) 推荐(5) 编辑
摘要: 概述同步服务(Synchronization Service)在CQRS架构中有着重要的作用。它通过访问事件总线来读取事件数据,并对事件进行派发。应用程序会向同步服务注册事件处理器,以便同步服务在派发事件的过程中,能够通过事件处理器对事件进行处理。在此,我将针对“查询数据库的同步”这一基本的CQRS应用场景,来给出一种最简单的同步服务实现方式。回顾一下CQRS架构,在《EntityFramework之领域驱动设计实践【扩展阅读】:CQRS体系结构模式》一文中,我给出了一个简单的CQRS架构模型图,在该图的“事件总线(Event Bus)”与“查询数据库(Query Database)”之间,有 阅读全文
posted @ 2011-08-11 09:20 dax.net 阅读(6388) 评论(10) 推荐(3) 编辑
摘要: 在上一篇文章《.NET应用框架架构设计实践 - 概述》的评论部分,有网友提出了一个在面向领域驱动架构的实践中比较常见的问题:“DDD使用聚合根访问,那例如那些通用查询如何实现?难道都要经过聚合根多步得到么?DDD如何实现关联表的查询,例如3表关联查询?”这个问题比较泛,涉及的内容也比较多,我就单独一篇文章介绍一下我对这个问题的看法。关于上面问题中的“通用查询”- 呃,这个定义比较模糊,我只能给出我的一些想法或者经验性的东西,我在本文中的经验与观点并不一定会100%适合您的应用场景,但我想应该还是具有一定指导性意义的。聚合与聚合根我想,还是从聚合根谈起吧。聚合根是DDD中的概念,不管是经典的DD 阅读全文
posted @ 2011-08-03 10:11 dax.net 阅读(17017) 评论(50) 推荐(17) 编辑
摘要: 在此将《.NET应用框架架构设计实践》系列文章做一个目录列表,方便读者朋友们浏览阅读。.NET应用框架架构设计实践 - 概述.NET应用框架架构设计实践 - 为应用程序框架提供多样化的配置方式 阅读全文
posted @ 2011-07-28 08:47 dax.net 阅读(6586) 评论(4) 推荐(2) 编辑
摘要: 我研究领域驱动设计已经近4年时间了,在这4年里,我从了解领域驱动设计的基本思想开始,系统地学习了与领域驱动设计相关的概念、开发模式以及应用系统架构风格,并将其运用在了实际的项目架构与开发中。在此之前,我一直被一些应用程序架构设计上的问题所困扰,比如:在数据持久层,如何让数据持久化机制能够支持不同的数据库类型,甚至是非关系型数据库;如何能够让开发人员将关注点放在领域模型上,而在更改领域模型的同时,不... 阅读全文
posted @ 2011-07-28 08:43 dax.net 阅读(18229) 评论(32) 推荐(23) 编辑
摘要: 原本不打算写这篇的,因为之前基本上每篇文章都有总结部分,因此,在系列文章结束的时候,需要总结的内容并不多;但正如刚刚所说,经过几个月的努力,本系列文章也到了该结尾的时候,于是还是做个简要的总结吧。我们从《项目简介与环境搭建》开始,了解了NLayerApp的项目概况、先决条件、运行环境以及部署方式,并对该项目所立足的理论基础做了一个非常简单的介绍;接下来的《多层架构与应用系统设计原则》、《DDD、分布式DDD及其分层》两篇文章从理论的角度对软件架构设计原则、分层架构、领域驱动设计、面向领域的多层分布式系统等方面进行了较为详细的介绍;《基础结构层(Cross-Cutting部分)》、《基础结构层( 阅读全文
posted @ 2011-07-19 15:21 dax.net 阅读(5978) 评论(5) 推荐(5) 编辑
摘要: Microsoft NLayerApp采用基于WCF的分布式服务组件为外界(各种类型的GUI)提供了访问接口,客户端程序只需要添加Service引用即可使用NLayerApp应用程序所提供的功能。在NLayerApp中,分布式服务部分的设计与结构还是比较简单的,主要包括DistributedServices.Core、DistributedServices.MainModule以及DistributedServices.Deployment三个项目。DistributedServices.Core该项目为所有位于分布式服务层的组件提供公共的类型定义与功能实现,比如在这个项目中定义了与异常处理相 阅读全文
posted @ 2011-07-19 10:56 dax.net 阅读(5390) 评论(7) 推荐(3) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 16 下一页