ER图中的E是不是DDD中的实体呢

大家好,又是一年春草绿啊,祝大家步步步高升,少摸电脑多触人。
我现在还是不能理解,DDD中的实体和数据库中的实体,有什么区别和联系,我的感觉,DDD的实体去掉其中的方法,留下的就是数据库的中的实体,不知道,我这个理解对不对呢,如果是这样,那我反过又有什么不可以呢,先花ER图,再为实体添加方法,是不是效果一样呢?
希望有识者,告知一二,拙者在此谢了

很多东西都可以各自转换,但要注意转换的过程中会有得有失,于是会导致失真,本来从现实到数据库是一次失真,再经一次转换不但更加失真,而且恐怕花费的成本会更高,要么就面向数据库,要么就DDD。

数据不是DDD的核心,数据库的E和DDD的E,形似但神不似。从形比较掌握不了DDD。出发点不同,还是不建议这样比较。
[该贴被SpeedVan于2011-04-12 13:35修改过]

不是应该先考虑类的职责,通过职责理清关系,这时候该对象需要包含的信息也就自然有了,
先考虑设计DB还是静态的在考虑问题,这个时候也很难融合设计模式吧,就算有,也是很局限的。

怎么总发完贴之后不出来呢,还得重写一遍,以为等一天能出来呢,结果今天还是没出来,只好再写一遍

2011年04月12日 13:34 "@SpeedVan"的内容
数据不是DDD的核心,数据库的E和DDD的E,形似但神不似 ...

兄台的话,我理解有些困难,书中有云,数据库是技术层面的东西,但这我并不关心,他属于什么,我更关心如何实现它,在我的上次一提问中,SpeedVan曾说过,仓储设计是DDD的关键,而实现仓储,数据库设计又成了重点,数据库分明是DDD的基础,就像樱花再美,没有树干它也只能存于画中,不管我们用DDD如何精妙,我们始终要手动去写CREATE TABLE,因为我们的只是类图,而不是ER图,不知道我的困惑,是否大家能理解呢

要是这样的话,你还没有理解仓储,请记住仓储不是数据库,用数据库支持仓储,不代表仓储是数据库。若果你把仓储当做数据库的话,你还没有完全摆脱数据库思维。选择数据库是一种手段,但不是唯一手段。如实体放到云中,你还会说CREATE TABLE吗?

所以我说仓储是领域为中心的思考,它放进去拿出来的都是聚合根,没有所谓的数据。

2011年04月13日 12:04 "@SpeedVan"的内容
你还没有完全摆脱数据库思维。选择数据库是一种手段,但不是唯一手段。 ...

既然您同意数据库是实现仓储的手段之一,那我的问题就不并奇怪,我没有接触过利用云的项目,也许正如您所说,不需要建DB,可我所见的项目都是需要DB的,都是需要CREATE TABLE的,所以我才会有这样的困惑,即我们如何在DDD的前提下,设计数据库,根聚合可不可以理解成主表的一条记录呢,值对像可不可以理解成MASTER表呢,而关系表,在DDD中,又该如何呢,可能您会说我这不又回到解放前了吗,可事实是,我确实还没解放呢 :(

大家都说,对像是活的,它有生命周期,它有它的行为和属性,当我们暂时不用一个对像的时候,让它在仓储里待命,到这我是全完赞成,并且能这样理解让我折服,但我要如何实现这个仓储呢,如果我选择了DB作为实现的手段,这个时候,实体对像,是不是就可以理解成,它仅仅是个(数据+类型)的组合体呢,然后我们将类型当成TABLE_NAME,把数据变成一条记录,我这样去设计合不合理呢,如果合理,那ER图中的E和DDD中的E,企不是一样东西,如果不合理,那我又该如何设数据库呢,还请前辈们再给点一点,我在日本买不到中文完整版的DDD书,所以并未真正读过,如果我的想法可笑无知,还请谅解啊

2011年04月13日 15:57 "@wqs918"的内容
根聚合可不可以理解成主表的一条记录呢 ...

若果你的表库结构是根据DDD中思维或者说是相同的思维,那么可以这么理解:表和类是对同一样的东西的不同描述。但是不同的描述有各自的特点,你可以理解他们描述同一样东西,而不能理解他们是同一个东西。一条记录是静态的数据,而聚合根是包含逻辑在内的,一条数据如何体现逻辑呢?当然数据库有他的实现逻辑方式,但是若果这样的话,还需要OO或者DDD么?直接一个REST+数据库就可以了。

数据库你可以理解为实体沉睡的地方(领域当中是活的,醒着的,所以实体沉睡的地方领域以外的地方——领域模型是描述现实逻辑,不是描述数据的增删改)。数据库中实体没有职责概念,因为它是睡着的,什么都不用做。

其实,我个人认为,引入CQRS的状态一词更好解析,数据库只是一个实体状态表而已,实体概念只存在领域中。

数据库思维才是正道,比OO思维要强得多。

不信的话,激进一点,不管效率,直接用SQL语言写个东西看看,比OO更符合现实,更灵活。

2011年04月14日 10:30 "@uda1341"的内容
数据库思维才是正道,比OO思维要强得多。 ...

OO所描述的就是现实,只是在现实当中套圈圈——边界思维。相比要把现实打散为数据的思维,还真不知道这种转换好在什么地方。还有劳表述一下在你眼中的数据库思维。

注:SQL对应的不是OO,用语言跟思维作对比,真不知道如何对比。若果你是说JAVA,还是那句:别拿JAVA=OO。

关系数据库以关系为中心,OO理论以实体为中心。

OO之所以搞出一大堆模式,起因就是这个中心搞错了。只有关系才能正确的描绘世界。

看看两者的理论基础,高下立判,关系数据库以集合论为基础,OO理论纯粹就是个山寨,无爹无娘。

很不幸的是关系不等于逻辑,想单用关系表达世界是一种静态思维,是一种缺失的世界。OO只是一种思维,边界思维,OO中说的是一切皆对象,而不是实体,对象是说边界,而不是唯一标识,OO是让我们从现实领域当中抽取我们所关注的东西,这个世界本无边的,但因为关注(需求)所以存在边界。OO更多是哲学观,哲学的依据是科学,秀逗了?

其实我们生活当中就有很多模式,OO搞出模式都是源自生活当中,只是把一种常用的模式,进行起名,方便表达。JAVA上很多模式都是用代码表达,但这些模式是可以上升到语言层次的,到时,你还会说很多模式么?别把模式上升了,就看不见模式。可以这么说模式就是一种逻辑。

补充一点:正确与否不是看爹娘的,而是否逻辑严密,难道说个个都必须是“我爹是李刚”,呵呵,说笑
[该贴被SpeedVan于2011-04-14 17:32修改过]
[该贴被SpeedVan于2011-04-14 17:43修改过]

看来最过都在讨论数据库和OO ,数据库的思想和OO的思想上确实是不相同的,但现在的状况是,大多数公司的项目或
产品,还是处在数据库时代,所以很多人都有很多的想法,这个数据库时代可能还会很长,而JDON网站给我们提供了一个讨论主流思想的地方,很感谢Banq,在这里学到了很多,因为很多企业的数据量会非常大,所以都是以数据库为主,设计上不会有太大的问题就行。要完全地用DDD,或是面向对象,主要是思想的改变,上层上用面向对象,或DDD,数据库只是一个保存数据的地方,用别的不也能保存吗,也能,而对象是动态的,是模拟人的思维在变化的,人的思维是很复杂的,所以它能表达人的思想,而数据库中保存的是持久的数据,对复的逻辑关系肯定是不行的。

我觉得wqs818的问题正问在点子上。深挖一下会触及到关键点。所谓OO与关系数据库的一些关键“冲突”。基于数据库(特指关系数据库应用)和OO是完全不一样的两种架构。这个论坛提倡后者:它是把数据库作为“对象永久化存储库”来使用的。切记这个“对象”是软件的对象(带有方法的),它们有可能对应于现实世界中的实体(比如:货品),也可能不(比如:只出现在电脑屏幕上的表单)。

撇开架构之争,首先就要厘清分析中谈及的“对象”(或实体)是软件对象还是现实世界对象,以及它们如何对应。

毫无疑问,现实世界中的对象是不带有自己的“方法”的。(在这个上下文中,现实世界是相对于软件之外而言的)
[该贴被flyingrobot于2011-07-13 22:12修改过]

2011年07月13日 22:10 "@flyingrobot"的内容
现实世界中的对象 ...

这需要你怎么看,现实世界中的对象是有边界的,当边界划定的时候,也就可以带有自主方法(不一定有,但可以带有)。没有边界的对象是不存在的。

2011年07月14日 17:03 "@SpeedVan"的内容
这需要你怎么看,现实世界中的对象是有边界的, ...

“边界”这个词,还是用于“域”比较好。对象、实体,更适合用“确定性”来限制。有些实体/对象,可能受“域”边界的影响,有些则不。