第二次看ddd的感受

10-03-09 tianqiq

去年看10第一次,基本上什么都没看懂。

今天又看了一次,总算能理解一点点了。

ddd 领域驱动设计 它的主要思想就是。 软件是现实中某个领域的反射。 所以我们的设计也应该基本跟领域里事物保持

一致。

在ddd中谈到了2个主要的对象:

值对象:我现在的理解,值对象就是一些无需区分,可以共享(因为他一般保持不变)的对象(对应着领域里的一些描述性的东西)。

实体对象:就是一些可以区分的对象(他对应着领域里一个唯一的事物)。

资料料库我现在的理解是:他就像一个仓库:他负责管理我们的对象。帮我们生产对象,也帮我们收藏对象。 原因就在于

我们的系统可能在某个时间内,需要某个对象。而在某个时间内又不需要。这个时候,我们就很自然的产生了资料库的概念。

我们不需要时可以把对象存到资料库,当我们需要是又可以从资料库里取得。

上面就是理解, 如果有不正确的地方。希望大家指出我的错误。

banq
2010-03-09 20:12

基本对头。看来你悟性不低啊

tianqiq
2010-03-11 13:06

首先谢谢banq老师的回复,有几个问题还想请教一下。

我看过一些java源码。基本上都是这么个结构.model-> hibernate -> dao -> service.

而且让我很不明白的是dao,service这2个中有惊人的相似。可以说service基本跟着dao走 ,

而且model dao serview基本是一个一一对应的关系。

我很不理解,难道这就叫做面向对象的设计吗。面向对象的设计应该是简洁,容易理解。

灵活,能够基本吻合现实领域的。 像这种我跟本就看不出他简洁在哪里

,灵活又体现在哪个方面。 以为我现在对ddd的理解。我会这样子对系统进行设计:当然还是3层

表现层->领域层->对象库层(资料库。总让我想到数据库。我就这样叫吧)。表现层,没什么好说的。

我就说领域层:领域层他是我们软件的核心,他反应出我们现实领域。 在我的设计里。

领域层里根本就没有持久化这么个说法。在领域层。他只能说是。在某个时间内我不需要某个对象

我会把他交给对象库层管理。需要是又从那里拿出来。也就是说持久层属于对象库层。并且完全对领域层透明。

我知道banq老师有这么个观点就是说。领域对象应该自己负责持久化自己。我的疑问就是难道说我们的

现实领域内就真有这个‘持久化’的概念吗? 如果没有。那有为什么要强加个领域对象呢?

banq
2010-03-11 13:33

2010年03月11日 13:06 "tianqiq"的内容
领域对象应该自己负责持久化自己。我的疑问就是难道说我们的

现实领域内就真有这个‘持久化’的概念吗? 如果没有。那有为什么要强加个领域对象呢?

你的前面设计是对的,model-> Hibernate -> dao -> service这种架构其实就是面向数据库设计编程做法,不是OO,是用OO语言做非OO的事情,虽然功能能跑,但软件质量不高。

关于领域对象是否负责自身持久化,这可以从对象职责这个角度来看,

何从职责和协作中发现丰富对象?一文中,引用对象职责一书认为持久化是领域的对象的一个职责,当然,具体实现上,如果语言框架自动实现持久化,比如使用key-value存储等,那么领域对象就可以有更多精力处理业务职责了。

tianqiq
2010-03-11 17:07

很高兴banq认同了我的观点。

从对象的角度上讲。领域对象确实应该自己负责持久化。但是不明白的是。比如说我们用spring。 在spring

中。spring负责对象的生产和销毁。我们说这使对象得到解放。它们不再需要自己管理这些事情。

那我们何不更加解放一点。使对象的持久化也让一个统一的对象库管理了呢? 而非要自己持久化呢?

真的要非常感谢jdon了。我的所有面向对象东西几乎都是在这里学到的。可惜的是我学校学的.net 现在却在做

php(实习)

很郁闷,真的很喜欢java的面向对象开发模式。但是形式所逼呀。 迷茫...有机会还是要往java方向走。

祝jdon能让更多的人知道,让更多的人获益。