致力于面向对象、仿生物领域建模技术方面的研究

要学会站在巨人的肩膀上让自己成长。QQ:94388050

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  24 随笔 :: 0 文章 :: 341 评论 :: 0 引用

置顶随笔 #

摘要: 以下这些点算是我对DDD学习的总结吧,我会在自己的学习过程中不断修正这些点或补充新的东西进来。学习要有积累,并且应该是简明扼要的积累。【补充,人总是在不断进步,所以很多观点也会随着时间的推移而改变。所以如果大家发现我以前的观点和这里有不同时,请理解一下,那只是表明我以前的理解。我最新的观点以这里为准。】 创建领域对象采用构造函数或者工厂,如果用工厂时需要依赖于领域服务或仓储,则通过构造函数注入到工厂; 一个聚合是由一些列相联的Entity和Value Object组成,一个聚合有一个聚合根,聚合根是Entity,整个聚合被看成是一个数据修改的单元,也就是说整个聚合内的所有对象要...阅读全文
posted @ 2011-11-13 18:52 netfocus 阅读(1897) 评论(6) 编辑

2011年12月3日 #

摘要: 1. 书是学习知识最快的最系统的方法;2. 看名人Blog是学习正统知识第二个非常有效的方法;3. 我热衷于微软.NET平台下的web应用开发,对软件设计,软件工程也有一定兴趣;4. 近一年来以及将来重点关注DDD的理论研究和逐步实践;5. 知识就是金钱;6. 学习知识是一个循序渐进的过程,看的书也是有层次的;7. 只有有恒心和毅力,坚定的意志才能深入了解某门技术或设计或架构,才又机会知道某个领域中哪些问题值得去研究;8. 当你研究到一定程度,会发现国内与国外的差别,你才会感叹学好英语非常重要;9. 不要以为工作多年,写过很多软件,就是水平高,就具有设计能力;提高设计能力我觉得首先看你学习的方阅读全文
posted @ 2011-12-03 20:44 netfocus 阅读(1025) 评论(8) 编辑

摘要: A cluster of associated objects that are treated as a unit for the purpose of data changes. External references are restricted to one member of the Aggregate, designated as the root. A set of consistency rules applies within the Aggregate's boundaries. Problem: It is difficult to guarantee the c阅读全文
posted @ 2011-12-03 14:21 netfocus 阅读(121) 评论(1) 编辑

2011年11月13日 #

摘要: 以下这些点算是我对DDD学习的总结吧,我会在自己的学习过程中不断修正这些点或补充新的东西进来。学习要有积累,并且应该是简明扼要的积累。【补充,人总是在不断进步,所以很多观点也会随着时间的推移而改变。所以如果大家发现我以前的观点和这里有不同时,请理解一下,那只是表明我以前的理解。我最新的观点以这里为准。】 创建领域对象采用构造函数或者工厂,如果用工厂时需要依赖于领域服务或仓储,则通过构造函数注入到工厂; 一个聚合是由一些列相联的Entity和Value Object组成,一个聚合有一个聚合根,聚合根是Entity,整个聚合被看成是一个数据修改的单元,也就是说整个聚合内的所有对象要...阅读全文
posted @ 2011-11-13 18:52 netfocus 阅读(1897) 评论(6) 编辑

2011年11月2日 #

摘要: 阅读本文需要有DDD,DCI的知识背景。首先,我觉得软件是用来被用户使用的,也就是说软件是用来帮用户完成一些事情的。从下面的用例图可以很好的理解用户与软件的关系:上图是超市里的一个营业员处理一笔销售的一个用例。从这个用例我们可以清楚的看到营业员和系统之间的一个交互。从中我们可以清晰的得出系统该做什么:makeNewSaleenterItemmakePayment这三个操作可以理解为用户希望软件为她做的三件事请。最近我惊奇的发现,DDD和DCI的一个巨大差别,让我不得不拿出来和大家确认。那就是:1)DDD强调软件不应该实现整个用例的交互过程,而应该只建立一个排除软件使用者的领域模型,该领域模型的阅读全文
posted @ 2011-11-02 23:14 netfocus 阅读(1254) 评论(10) 编辑

2011年10月27日 #

摘要: 阅读本文的前提是假设你已经熟悉领域驱动设计(DDD)和CQRS架构。领域模型图如下:说明:上面的领域模型在设计时借鉴了DDD和CQRS的思想;利用DDD的思想来设计实体、值对象、聚合、聚合根;图中有三个聚合根,分别是Forum、Thread、User;其中Thread聚合根聚合了Post和ViewCounter两个对象;Post是Thread的回复,显然Post离开Thread没有意义,但是Post在Thread聚合内有一个本地标识,即只要在当前Thread下唯一即可,不需要全局唯一。由于CQRS思想的引入,可以确保我们在设计领域模型时不必考虑由于对象关联而产生的统计信息该如何存放,从而让领域阅读全文
posted @ 2011-10-27 01:02 netfocus 阅读(1445) 评论(11) 编辑

2011年10月10日 #

摘要: 本文内容提要:1. 领域驱动设计之领域模型;2. 为什么建立一个领域模型是重要的;3. 领域通用语言(Ubiquitous Language);4. 将领域模型转换为代码实现的最佳实践;5. 领域建模时思考问题的角度;6. 领域驱动设计的标准分层架构;7. 领域驱动设计过程中使用的模式;8. 设计领域模型的一般步骤;9. 在分层架构中其他层如何与领域层交互;10.为什么面向对象比面向过程更能适应业务变化;11.领域驱动设计的其他一些主题;12.一些相关的扩展阅读;领域驱动设计之领域模型 2004年Eric Evans 发表Domain-Driven Design –Tackling Comp.阅读全文
posted @ 2011-10-10 01:01 netfocus 阅读(5047) 评论(43) 编辑

2011年9月18日 #

摘要: 先说最重要东西,即我的核心面向对象分析思路:1)找出最关键的一些业务场景;一般通过动词来寻找,比如招聘系统中,一个应聘人投递一个职位就是一次应聘,应聘就是一个业务场景;一个学生参加某门课的考试,那么考试就是一个业务场景;一个学生去图书馆借书,那么借书就是一个业务场景;2)针对每个业务场景分析出有哪些场景参与者,哪些参与者以对象的形式参与,哪些参与者以服务的形式参与;为什么要区分对象还是服务是因为有时候我们不关心参与者是哪个,而只关心参与者是什么。一般服务在系统中我们只关心它是什么服务,并且在系统中服务一般也只有一个实例;而对象则不同,我们会关心对象是谁,即哪一个;3)分析每个场景参与者对象的基阅读全文
posted @ 2011-09-18 21:10 netfocus 阅读(2702) 评论(15) 编辑

2011年9月16日 #

摘要: 废话不说了,一切要看了源代码才知道!一句话:这个基础架构和Demo是我用了很多的时间反复思考、重构才做出来的,从代码中你将看到:1)我的编码风格,细微处见功底;2)如何设计一个基于DDD建模思想、四色原型分析方法,以及DCI架构思想的领域建模基础架构;3)展示如何用上面的思想分析和设计一个图书借阅系统的部分核心业务逻辑(借书和还书);下载地址:http://files.cnblogs.com/netfocus/BookLibraryExample.rar需要用VS2010才能打开。各位看官如果在看完代码后觉得有一些收获,请支持一下;如果有什么批评的建议或意见也务必跟我说,大家多讨论才能进步。今阅读全文
posted @ 2011-09-16 23:14 netfocus 阅读(2165) 评论(13) 编辑

2011年9月10日 #

摘要: 最近对OO的理解又有了一些新的认识,拿出来和大家分享一下。为了能让大家简单直观清晰的知道我想表达的主要意思,我不说废话了。直接提出问题,然后回答。1. 什么是真正的对象?2. 什么是面向对象分析阶段时的对象?3. 什么是面向对象设计阶段时的对象?4. 什么是面向对象实现阶段时的对象?1. 真正的对象:我所理解的真正的对象就是现实生活中客观存在或不存在的真正的对象。这个对象有一个明显的特征就是它具有非常多的状态特征和行为特征。比如一个人是一个对象,他在一生中会经历无数个交互场景,在这个过程中,每个人的行为特征会不断增多,大部分行为是通过后天学习得到的,只有少数行为是先天就具有的;另一方面,对于状阅读全文
posted @ 2011-09-10 12:08 netfocus 阅读(3178) 评论(28) 编辑

2011年7月10日 #

摘要: 好久没有写文章了,最近比较忙,另一方面也是感觉自己在这方面没什么实质性的突破。但是今天终于感觉自己小有所成,有些可以值得和大家分享的东西,并且完成了两个可以表达自己想法的Demo。因此,趁现在有点时间,是写文章和大家分享的时候了。首先给出这两个Demo的源代码的压缩包的下载地址,因为之前有博友说他没有装VS2010而没办法运行Demo,所以这次我分别用VS2008和VS2010实现了两个版本。ht...阅读全文
posted @ 2011-07-10 01:59 netfocus 阅读(3888) 评论(28) 编辑

2011年6月21日 #

摘要: 关于图书管理系统的业务大家都应该比较了解了,主要的核心业务是:用户持图书卡去图书馆借书或还书。下面是他们几个人讨论的最经典内容,我特地整理出来供大家可以集中的观看他们的讨论。其实在我看来更是一种世界观与世界观的碰撞,我想借此表达的思想是:代码不一定要写很多,但是思维方式或者说世界观一定要正确,否则方向错了,就什么都错了。以下是讨论的详细内容:Jdon007: 1、借书人(Reader)与借书卡(Card)不是镜像,借书人(Reader)是借书卡(Card)的使用者。 2、认证是认证,跟借书卡没有关系。在这里相当于借书人有没有资格拿到卡,也就是如果你不是这个学校的的师生,就拿不到这个学校图书..阅读全文
posted @ 2011-06-21 23:20 netfocus 阅读(1582) 评论(12) 编辑

2011年4月17日 #

摘要: 废话不多说了,本文的目的是希望通过一个“银行转账”的例子来和大家分享一些我最近学习到的关于如何组织业务逻辑的心得和体会。当然,本人的能力和领悟有限,如有不正确之处,还希望各位看官能帮我指出来。我始终坚持一个信念,没有讨论就没有进步,任何一个非盈利为目的的人或组织始终应该把自己所学的知识共享出来与人讨论,这样不管对自己或对他人或对整个社会都大有好处。因为一个人的知识毕竟是有限的,但可以(并且也只能)和别人相互沟通交流学习来弥补这个缺陷。银行转账的核心业务逻辑大家应该都很熟悉了,主要有这么几步: 源账户扣除转账金额,当然首先需要先判断源账户余额是否足够,如果不够,则无法转账; 目标...阅读全文
posted @ 2011-04-17 21:53 netfocus 阅读(2003) 评论(15) 编辑

2011年4月3日 #

摘要: 前面一篇文章介绍了我设计的基于“事件”驱动的领域模型的基础框架的设计起因和设计思路。基于这个框架,我们领域模型中的所有领域对象有如下几个特点:任何一个领域对象是“活”的,它不仅有属性(对象的状态),而且有方法(对象的行为)。为什么说是“活”的呢?因为领域对象的行为都不是被另外的领域对象调用的,而是自己去响应一些“事件” ,然后执行其自身的某个行为的。在我看来,如果一个领域对象的方法是被其他的领域对象调用的,那这个对象就是“死”的,因为它没有主动地去参与到某个活动中去。这里需要强调的一点是,领域对象只会更新它自己的状态,而不会更新其他领域对象的状态。所有的领域对象之间都是平等的,任何两个领域对象阅读全文
posted @ 2011-04-03 23:30 netfocus 阅读(1979) 评论(2) 编辑

2011年3月27日 #

摘要: 从去年10月份开始,学了几个月的领域驱动设计(Domain Driven Design,简称DDD)。主要是学习领域驱动设计之父Eric Evans的名著:《Domain-driven design:领域驱动设计:软件核心复杂性应对之道》,以及另外一本Martin Flower的《企业应用架构模式》,学习到了不少关于如何组织业务逻辑方面的知识。另外,在这个过程中也接触到了一些开源的架构和一些很好的思想。如:命令查询职责分离(Command Query Responsibility Segregation,简称CQRS),事件驱动架构(Event Driven Architecture,简称ED阅读全文
posted @ 2011-03-27 17:03 netfocus 阅读(3191) 评论(18) 编辑

2011年3月5日 #

摘要: 在讨论四色原型之前,我想先狗胆讨论下什么是我所认识的“世界”?我觉得世界由物质及其相互作用组成。“物质”是不以人的意识为转移的客观存在;而“相互作用”则是我们平时所理解的各种活动,比如人与人之间的交谈,打架,等等。还有一点需要特别分析一下,那就是“何为客观”?我觉得客观是一个相对的概念,可以这样简单的理解:如果A没有修改B的权利,也就是说B不以A的意识为转移,则认为B是A的客观存在;反之,则认为B不是A的客观存在。举个例子,一家软件公司为一家金融机构做一个金融领域的软件。该金融软件需要满足一些和金融领域相关的一些业务规则。那么业务规则相对于这家软件公司来说是否是一个客观存在呢?回答是肯定的。为阅读全文
posted @ 2011-03-05 23:38 netfocus 阅读(2262) 评论(6) 编辑

2011年1月17日 #

摘要: 最近一直在学习领域驱动设计(DDD)的理论知识,从网上搜集了一些个人认为比较有价值的东西,贴出来和大家分享一下: 我一直觉得不要盲目相信权威,比如不能一谈起领域驱动设计,就一定认为国外的那个Eric Evans写的那本书中的一些概念就一定是正确的,认为领域驱动设计就一定是聚合,聚合根,实体,值对象等概念。我们要有自己的思想,要有自己判断真正的领域模型该是什么样子的勇气和追求。1. "领域驱动设计" = “问题域模型驱动领域建模” + “领域建模驱动软件实现”2. 问题域建模的过程就是业务领域分析的过程,对于企业而言就是业务架构的分析和建立过程,这里不包含任何OO的设计成分,阅读全文
posted @ 2011-01-17 21:53 netfocus 阅读(2739) 评论(12) 编辑

2010年12月25日 #

摘要: 前一篇文章中,我谈到了领域驱动设计中,关于ORM工具该如何使用的问题。谈了很多我心里的想法,大家也对我的观点做了一些回复,或多或少让我深深感觉到面向对象设计和领域驱动设计是两个不同层次的东西。你会面向对象并不代表你就会面向领域设计。后来,我无意中发现了一个网站,http://www.jdon.com,这个网站中所包含的知识在我看来非常深入,而且基本上都包含了现在一些最新的设计思想。我看了几篇文章后渐渐感觉到领域驱动设计并不是我想象中那么简单。其实学技术,学框架并不是太难,只要你肯花时间就一定能慢慢领悟。但要学会领域建模,我现在觉得非一朝一夕就能学会。好了。接下来还是回到我今天晚上的这篇文章的主阅读全文
posted @ 2010-12-25 00:34 netfocus 阅读(2183) 评论(11) 编辑

2010年12月20日 #

摘要: 最近一直对DDD(Domain Driven Design)很感兴趣,于是去网上找了一些文章来看看,发现它确实是个好东西。于是我去买了两本关于领域驱动设计的书本和一本企业应用架构模式的书。看了之后也掌握了一些理论基础。但总感觉需要通过做一个实际项目来测试自己所学到的知识。因为以前我开发过一个叫做“蜘蛛侠论坛”的网站,官方演示地址:http://www.entityspider.com/,但在我学习了DDD之后,才明白原来之前我所做的设计是贫血模型+事务脚本的设计方法。这种设计方法有很多不足,最大的不足就是业务逻辑不能重用,业务逻辑没有组织为一个可重用的自封闭的业务模型。所以我想用DDD的思想来阅读全文
posted @ 2010-12-20 23:17 netfocus 阅读(2694) 评论(20) 编辑

2010年8月1日 #

摘要: 最近在学习ASP.NET MVC 2.0的一些开源项目,发现这些项目中都普遍用到了同一种架构设计,即:ASP.NET MVC + Service + Repository。从网上看了一些关于这方面的介绍后觉得这种架构确实满好的。以微软的一个典型的开源项目Oxite为例:该项目由下面的Projects组成:1)Oxite;2)Oxite.LinqtoSqlDataProvider;3)Oxite.Mvc;4)Oxite.Mvc.Tests;5)OxiteSite;Oxite Project:1)定义所有项目中需要用到的Model,即Entity,并且所有的Model都是纯Model,它们不依赖于阅读全文
posted @ 2010-08-01 18:07 netfocus 阅读(3737) 评论(9) 编辑

2010年4月4日 #

摘要: 上次发布了1.0版本,经过两个月的测试,发现和改进了不少问题。因为今后打算全面开始接触学习ASP.NET MVC源代码和jquery,打算今后用这两个框架打造蜘蛛侠论坛3.0版。所以,今天发布蜘蛛侠论坛基于ASP.NET 2.0 WebForm技术开发的最终版本。我为这个论坛倾注了很多的个人时间,目的就是希望它功能不断完善,架构不断改进,安全性能不管提升。我想任何事情不能看表面,我在做这个论坛的时候学习过很多有名的开源论坛社区,比如国外的DNN,CommunityServer,或者国内的Discuz NT等,发现都太复杂,虽然它们功能很强大,可以拿过来直接使用,但却不是非常有利于学习其思想,尤阅读全文
posted @ 2010-04-04 15:01 netfocus 阅读(2900) 评论(35) 编辑