其他博文:

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

扯淡开始:

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

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

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

和网上很多“观后感”所不同的是,大多数对于这部电影的探讨分析都是针对科学、宇宙、相对论、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. python pickle和json的区别

    pickle可以在python之间进行交互 json可以实现python与不同开发语言的交互 pickle可以序列化python中的任何数据类型 json只能序列化python中的常归数据类型(列表等 ...

  2. css自适应宽度高级写法:一行多列~~~某些列的宽度是固定值

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxgAAACdCAIAAAC4iknFAAAgAElEQVR4nO2d3VsTV7uH51/wqhKotn

  3. CentOS6.5安装中文输入法

    首先进入命令形式的客户端 切换成root用户,输入命令"su root"即可,接着输入 yum install "@Chinese Support" 命令按en ...

  4. 第三方框架之ThinkAndroid 学习总结(一)

    ThinkAndroid是一个免费的开源的.简易的.遵循Apache2开源协议发布的Android开发框架,其开发宗旨是简单.快速的进行Android应用程序的开发,包含Android mvc.简易s ...

  5. $.each ---- 跳出当前的循环

    有些朋友可能会以为在jquery跳出循环可以直接使用continue和break了,但是使用之后没有效果,因为在jquery中没有这两条命令.后来上网查了下,得到了结果:return false;—— ...

  6. OC整理1

    关于面向对象 看起来简单,好好体会其实有点深奥,初学的时候更感觉抽象,可能由于开发经验不足的关系吧,很难体会到面向对象的精髓. 放轻松,我们来用最直白得方式来探讨一下面向对象. 首先,编程是为了用计算 ...

  7. 简化 Web 应用程序与 Windows Azure Active Directory、ASP.NET 和 Visual Studio 的集成

    大家好! 今天的博文深入讨论我们今天推出的开发人员工具和框架中的一些新功能.我们通过与 ASP.NET 和 Visual Studio 团队合作开发了一些重大的增强功能,让开发人员能够轻松使用 Win ...

  8. 【CSS3进阶】酷炫的3D旋转透视

    之前学习 react+webpack ,偶然路过 webpack 官网 ,看到顶部的 LOGO ,就很感兴趣. 最近觉得自己 CSS3 过于薄弱,想着深入学习一番,遂以这个 LOGO 为切入口,好好研 ...

  9. 【数据结构】平衡二叉树—AVL树

    (百度百科)在计算机科学中,AVL树是最先发明的自平衡二叉查找树.在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树.查找.插入和删除在平均和最坏情况下都是O(log n).增 ...

  10. Nodejs之MEAN栈开发(三)---- 使用Mongoose创建模型及API

    继续开扒我们的MEAN栈开发之路,前面两节我们学习了Express.Jade引擎并创建了几个静态页面,最后通过Heroku部署了应用. Nodejs之MEAN栈开发(一)---- 路由与控制器 Nod ...