其他博文:

以下内容属于博主“臆想”,如有不当,请别当真。

扯淡开始:

诺兰的最新电影《星际穿越》,最近非常的火热,每个人看完之后都会有不一样的感受,黑洞、虫洞、时间旅行、相对论、未来、人类、爱等等,这些都是这部电影的关键词,科学和艺术原来还可以这样子结合,真是令人叹服。网上有很多人去写一些东西进行分析探讨,也引发了全球“科学热”,这些都是好电影所蕴含的巨大影响力。人是很神奇的动物,每个人都有思考的能力,而且世界上没有完全相同的两个人,所以对待一种事物,每个人都有自己的看待角度,所以得出的结论也不尽相同。

宇宙只是界面,科技永远触摸不到世界的本原。

前段时间刚看完这部电影,然后无意间在园中,发现了一位园友写的一篇观后感,说实话,当时看过这篇博文之后只是有一个印象,并没有深入的去思考一些东西,上面的那段话就来自园友的这篇博文,现在仔细读起来确实很有深意,当然这只是对某一部分人来说,有的人看到也许会很不以为然。

和网上很多“观后感”所不同的是,大多数对于这部电影的探讨分析都是针对科学、宇宙、相对论、N 维空间、剧情等等,比如探讨电影中的黑洞、虫洞描述的是否正确?N 维空间具体是怎样的?“时间穿越”是否真的存在?电影剧情的衔接是否合理?。。。而这位园友的观后感非常”另类“,结合自己的理解,我大致再总结一下:

  • 现实世界是我们与自然的“操作界面”。
  • 虫洞是“操作界面”的一种“快捷方式”,黑洞相当于一个“目录夹”,存放各类文件。
  • 科学家所总结的物理定律,可能只是指导如何玩宇宙这个“操作界面”的“初级手册”。
  • 永恒不变的是人类的爱。
  • 一切都是信息(anything is bit)。

小的时候,我经常在树下观察蚂蚁活动,看他们如何搬运食物,如何搭建巢穴等等,但他们却意识不到我的存在,而我却能观察他们的一举一动,或者他们也意识到我的存在了,只不过我不知道而已,又或者他们觉得我很另类,就像电影中墨菲所说“书架中的 Ghost”,Ghost 只不过是我们对一些不理解事物的统称,也许蚂蚁眼中的我也是“Ghost”吧,但细想一下,如果我们是蚂蚁呢?是不是也有像我一样观察蚂蚁的“我”呢?凡事都有相对性,只不过对一些事物我们不理解罢了。

把现实世界看作是与自然的“操作界面”,这一点内容我想也只有程序员能够想的到吧,但这一部分的想象确实有点太天马星空,不是一般人所能够理解的,但后面的两点内容对我触动很大,或者引发了与我的一些共鸣,上面也曾说过,人是很神奇的动物,因为人有思想,有思考的能力,有语言的能力等等,但最要的是人有情感,人类在不断的进行探索宇宙,但对于自身的探索却始终有限,就像电影中墨菲所说的“Ghost”,其实就是她未来的父亲,但不管过去与未来,父亲对女儿的爱是永恒不变的,这个话题就到这,说多了容易“烂”。

一切都是信息,就像我们玩的游戏,只不过是我们敲出的一行行代码,但表现出来却那么“真实”,引用园友博文中的一段话:

如果我做科幻片的编剧,我会让男主角历经千辛万苦,最后发现自己是一串 0 或 1 的数字。

反过来思考我们人类自身,从某一角度看待,我们何尝不是由“信息”组成的呢?比如生物学中的 DNA、基因、细胞等,这些都可以称之为“信息”,只不过表现方式不同罢了,不同的生物由不同的基因序列组成,但都属于基因,抽离出来它们本质上都是一样的,就像游戏中不同的人物,都是由 0 或 1 组成,只不过所不同的是,0 和 1 的数量和排序不同,但本质都是一样的,都是信息,世间万物抽离出来其实都是原子组成,但神奇的是组成出来的不同事物却完全不同,更为神奇的是人类本身,因为他可以思考他自身是由什么组成的。

由电影所引发的思考就不扯了,因为越扯越远,越扯越离谱。


回答标题的两个关键词:实体和值对象

曾在解道中看到有人这样描述实体和值对象之间的关系:

这个世界是事实和事物的集合。
这句话充分体现了实体对象和值对象的关系。我们所关心的事是事实,他是实体。而我们所关心的事实是由 0 到 N 个事物组成的集合。
如果觉得抽象的话,请用 DNA 来理解每个碱基( DNA 由“jian”基组成,具体哪个"jian"忘了)就是值对象,而拼凑成的 DNA 为实体,而且这个实体是唯一的,我们把他当作每一个人。
有一个大前提,就是当你关心到人的时候,这个世界上每一个人就是实体,而组成这个世界上所有的人的“jian”基就是值对象了。
那这么看来每一个人(事实)都由“jian”基(事物)所组成了。

其实这段描述信息量很大,简单说一下我所理解的,实体和值对象的区分是在“关注点”确定的情况下,也就是他所说的“大前提”,在这个大前提下,值对象其实就是信息,而实体就是由信息组成的一种事物,实体与实体之间的传递就是信息的传递,如果大前提变化了,所有的一切都是可以“逆向”的,也就是说实体可以变为值对象,值对象也可以变为实体,这种情况在现实生活中也很普遍,人口普查就是一个最好的示例。

对待一种事物,我所关心它,也就是说我必须先要区分它,然后接下来才能进行针对它的一些操作,这个“它”就是实体,那对于组成它,或者说描述它的一些信息,都可以看作是值对象,比如一个人的人名,我只需要知道这个值就可以了,但对于它所关联的对象,可以看作是实体,也可以看作是值对象,那具体怎么进行区分呢?主要看我关不关心“它”关联的对象,如果关心,那就是实体,如果不关心,那就是值对象。

在之前的一篇博文中,我常提到“双胞胎”的例子,我和我双胞胎哥哥出生在一所医院中,这个医院据说是“双胞胎的摇篮”,什么意思?因为出生在这个医院的有 80% 是双胞胎(有点扯),医院有个惯例,就是要对双胞胎的出生情况进行调查,比如要对双胞胎父母、以及出生地调查,用来计算出哪个地方出生的双胞胎最多,更具体的是,比如我父亲那个地方双胞胎的父亲或母亲比例,对于我和我双胞胎哥哥来说,医院就要根据我俩来调查我父母,在这个调查的前提下,其实我父母表现出来的就是值对象,因为医院只需要知道这对双胞胎父母的所在地就可以了,不需要知道这个父母具体是哪个?也就是说,在这个调查过程中,医院并不关心这个,对于他们来说,双胞胎的父母表现出来的只不过是一堆“信息”,但前提是这个“调查系统”,这是医院所关心的。对于我和我双胞胎哥俩来说,就不是这样了,对于我们的父母,我们所关心的就不仅仅是一堆“信息”,我们需要确定哪个是我们的父母?这个非常重要。

关心点的不同,就会造成信息表现方式的不同。

当某一实体确定的情况下,比如在某一场景中,把人设计为实体,然后再思考,与他关联的一些对象是设计为实体?还是设计为值对象?如果这个不能确定的话,就要想一想,在这个场景中,我关不关心它?如果关心的话,就要设计为实体,如果不关心,就要设计为值对象,对于同一关联对象,所关心的不同,最后设计的也会不同。

凡事无绝对,就扯到这!

DDD 领域驱动设计-“臆想”中的实体和值对象的更多相关文章

  1. DDD领域驱动设计之聚合、实体、值对象

    关于具体需求,请看前面的博文:DDD领域驱动设计实践篇之如何提取模型,下面是具体的实体.聚合.值对象的代码,不想多说什么是实体.聚合等概念,相信理论的东西大家已经知晓了.本人对DDD表示好奇,没有在真 ...

  2. DDD 领域驱动设计-两个实体的碰撞火花

    上一篇:<DDD 领域驱动设计-领域模型中的用户设计?> 开源地址:https://github.com/yuezhongxin/CNBlogs.Apply.Sample(代码已更新) 在 ...

  3. DDD领域驱动设计之领域服务

    1.DDD领域驱动设计实践篇之如何提取模型 2.DDD领域驱动设计之聚合.实体.值对象 3.DDD领域驱动设计之领域基础设施层 什么是领域服务,DDD书中是说,有些类或者方法,放实体A也不好,放实体B ...

  4. DDD领域驱动设计之领域基础设施层

    1.DDD领域驱动设计实践篇之如何提取模型 2.DDD领域驱动设计之聚合.实体.值对象 其实这里说的基础设施层只是领域层的一些接口和基类而已,没有其他的如日子工具等代码,仅仅是为了说明领域层的一些基础 ...

  5. DDD领域驱动设计之运用层代码

    1.DDD领域驱动设计实践篇之如何提取模型 2.DDD领域驱动设计之聚合.实体.值对象 3.DDD领域驱动设计之领域基础设施层 4.DDD领域驱动设计之领域服务 5.整体DEMO代码 什么是运用层,说 ...

  6. DDD 领域驱动设计-领域模型中的用户设计

    上一篇:<DDD 领域驱动设计-如何控制业务流程?> 开源地址:https://github.com/yuezhongxin/CNBlogs.Apply.Sample(代码已更新,并增加了 ...

  7. DDD 领域驱动设计-三个问题思考实体和值对象(续)

    上一篇:DDD 领域驱动设计-三个问题思考实体和值对象 说实话,整理现在这一篇博文的想法,在上一篇发布出来的时候就有了,但到现在才动起笔来,而且写之前又反复读了上一篇博文的内容及评论,然后去收集资料, ...

  8. DDD 领域驱动设计-三个问题思考实体和值对象

    消息场景:用户 A 发送一个消息给用户 B,用户 B 回复一个消息给用户 A... 现有设计:消息设计为实体并为聚合根,发件人.收件人设计为值对象. 三个问题: 实体最重要的特性是什么? Messag ...

  9. 浅谈我对DDD领域驱动设计的理解

    从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决. 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品 ...

随机推荐

  1. Torch7 Tensor切片总结

    1.narrow(k,m,n) 这个函数是选中第k维的从m行开始,供选中n行 2.sub(dim1s,dim1e[,dim2s,dim2e,..,dim4s,dim4e]) 功能最强大,可以切任意的一 ...

  2. dns解析慢 修改的参数

    情况: ping域名时反应速度慢,ping ip却很正常 方法一:禁用ipv6 /etc/hosts中注释ipv6相关的 vim /etc/sysconfig/networks NETWORKING_ ...

  3. SpringMVC4 实例

    之前我先创建普通web项目,再直接添加maven框架.结果springMVC框架一直不能正确的访问控制器. 但通过以下方式创建maven web项目就能获得正确的架构路径. 1.新建一个maven项目 ...

  4. ES6(四) --- 正则 Number Math

    想学vue了  重启ES6的学习之路 在ES5 中正则的构造器  RegExp  不支持第二个参数 ES6 做了调整   第二个参数表示正则表达式的修饰符(flag) var regex = new ...

  5. 初识 Html5

    1.1认识HTML5 HTML5并不仅仅只是做为HTML标记语言的一个最新版本,更重要的是它制定了Web应用开发的一系列标准,成为第一个将Web做为应用开发平台的HTML语言. HTML5定义了一系列 ...

  6. 多文档上传(upload multiple documents)功能不能使用怎么办?

    问题描述: 在SharePoint 2010的文档库里选择documents标签,然后选择upload document下拉菜单,你会发现upload multiple documents那个按钮是灰 ...

  7. iOS开发中手机号码和价格金额有效性判断及特殊字符的限制

    在实际开发过程中,经常会遇到些不能让用户随便地输入手机号码,对输入的手机号码的正确判断:有些输入框只能输入数字,不能输入字母或特殊字符:还有些如价格金额之类的就只能输入数字和小数点且小数点后面保留两位 ...

  8. 关于MongoDB你需要知道的几件事

    Henrique Lobo Weissmann是一位来自于巴西的软件开发者,他是itexto公司的联合创始人,这是一家咨询公司.近日,Henrique在博客上撰文谈到了关于MongoDB的一些内容,其 ...

  9. 一步步学习javascript基础篇(4):面向对象设计之创建对象(工厂、原型和构造函数等模式)

    前面我们介绍了可以通过Object构造函数或对象字面量都可以用来创建单个对象,但是如果需要创建多个对象的话,显然很多冗余代码. 接下来介绍几种模式来创建对象.不过在此之前,我们还是先来了解下 type ...

  10. [转]各种移动GPU压缩纹理的使用方法

    介绍了各种移动设备所使用的GPU,以及各个GPU所支持的压缩纹理的格式和使用方法.1. 移动GPU大全 目前移动市场的GPU主要有四大厂商系列:1)Imagination Technologies的P ...