DDD领域驱动设计-熵增定律

1,418 阅读4分钟

一、熵增定律

定义:在一个孤立系统里,如果没有外力做功,其总混乱度(熵)会不断增大。

这里面有三个词非常重要:孤立系统、无外力做功、总混乱度(熵)。

首先我们来解释什么是“熵”。

熵(Entropy),最早在1865年由德国物理学家克劳修斯提出,用以度量一个系统“内在的混乱程度”。

你可以理解为,系统中的无效能量。

比如物质总是向着熵增演化,屋子不收拾会变乱,手机会越来越卡,耳机线会凌乱,热水会慢慢变凉,太阳会不断燃烧衰变……直到宇宙的尽头——热寂。

它也左右着国家和企业的发展规律,让组织变得臃肿,缺乏效率和创新;它左右着个人的方方面面,让我们安于懒散、难以坚持、难以自律……

二、反熵增,只能让灭亡来得晚一点

那么这还有办法可解吗?

从定义来说,熵增的条件有两个:封闭系统+无外力做功。

只要打破这两个条件,我们就有可能实现熵减。

听起来好抽象,怎么理解?

反熵增,即熵减。是通过系统之外的第三者对其“做功”,实现对孤立系统的“熵转移”,使得原系统的熵总量减少;熵减可以使系统从混乱恢复有序。

也许我们可以从生命里得到启示,整个生命的发展就是一部负熵的历史。

薛定谔说:生命以负熵为食。也就是说,生命的维持和发展,是以造成环境的熵增加(亦即摄走负熵)为代价的。

三、软件系统的熵增

在软件开发、维护过程中。软件的生命力总是从最初的理想状态,逐步趋向于复杂、混乱和无序状态发展,直到软件不可维护而被迫下线或重构。这种损坏软件质量的因素的逐步增长,叫做软件的熵增现象。

软件熵增的表现:

代码混乱、新人不易上手 代码高度冗余,复用性低,开发效率低 扩展和修改困难,牵一发动全身 业务数据错乱 程序性能低下 系统难以移置 BUG率居高不下 其它… 软件熵增的根本导因是:客观世界的熵增导致软件开发复杂化。那么,如何进行软件系统反熵增? 答案是通过‘做功’控制这种复杂性。

做功方式有很多,比如:分层架构,开发模式,面向对象,中间件等等。但是这些从纯技术上控制复杂度。

但控制复杂性的关键是有一个好的领域模型,这个模型不应该仅仅停留在领域的表面,而是要 透过表象抓住领域的实质结构,从而为软件开发人员提供他们所需的支持。

四、软件的核心

软件的核心是其为用户解决领域相关的问题的能力。所有其他特性,不管有多么重要,都要服务于这个基本目的。当领域很复杂时,这是一项艰巨的任务,要求高水平技术人员的共同努力。 开发人员必须钻研领域以获取业务知识。他们必须磨砺其建模技巧,并精通领域设计。

然而,在大多数软件项目中,这些问题并未引起足够的重视。大部分有才能的开发人员对学习与他们的工作领域有关的知识不感兴趣,更不会下力气去扩展自己的领域建模技巧。技术人员喜欢那些能够提高其技能的可量化问题。领域工作很繁杂,而且要求掌握很多复杂的新知识,而这些新知识看似对提高计算机科学家的能力并无裨益。

相反,技术人才更愿意从事精细的框架工作,试图用技术来解决领域问题。他们把学习领域知识和领域建模的工作留给别人去做。软件核心的复杂性需要我们直接去面对和解决,如果不这样做,则可能导致工作重点的偏离。