本文阐述了学习新的方法体系的难度,重点介绍了知行合一在软件研发领域的重要性和在领域驱动设计中的实践。通过对比阳明心学,文章阐述了知行合一的重要性并展望了在领域驱动设计中实现知行合一的可能性。最后提到在当代AI大模型的背景下,知行合一的新表现。
介绍了领域驱动设计的目标和方法,强调了其在解决软件设计问题中的重要作用,但也存在知行合一难以实现的挑战。
AI大模型能够理解和应用领域驱动设计的知识,与人的知行合一相结合,可以提高领域驱动设计的效率和质量。
学习一门新的方法体系,最难做到的是知行合一。在软件研发领域,一个行之有效的方法体系,一定是提出者从“实践”中萃取出来的心得体会,糅合自己对软件研发“知识”的理解体悟,再广泛参考各种学说,才能完善为一套方法体系。然而,这个“实践”是提出者的实践,并非学习者的实践,“知识”也是提出者掌握的,而非学习者的收获,是以,彼之行非吾之行,彼之知亦非吾之知,中间隔了一层,认知与实践就难免出现极大的偏差。
王阳明的“知行合一”,要求即知即行,他常说:“知而不行,只是未知。”又说:“知行如何分得开?”
「注1」
因此,对知行合一的理解,也可以说是知行一体,知有实践的含义,若为知识,便是指可以实践的知识,行也可出真知,若为实践,也是能悟出知识的实践。二者合二为一,既不蹈空,也不虚无。
心学的“知”是良知,更注重修心以诚,德行如一,但也可延伸到学习领域。在德行方面,“人皆可以为尧舜
「注2」
”,即便是“愚夫愚妇”也能做到知行合一,这是因为阳明先生“认为即使是不懂性命之学的众人,也可接受教育,以启发他本有的良知,之后在世上勇敢又正直地做人。
「注1」
”。但在学习领域,知行合一就非初学者可以苛求,而是学习的最高境界,是寻常人难以企及的。
就以领域驱动设计来说,我对它的研究也算够深够细了,至今还是无法做到知行合一。归根结底,我对它的理解也仅限于我的“识见”,从而指导我的“实践”,这就必然受到我这个人的天资、素养、器识、努力程度、实践机会等诸多方面的影响和限制,推之于其他人,同样如此,这也就是领域驱动设计之所以难以成功的主要原因。
世上的任何一种学说都不可能一统天下,因为它根本就不能做到一统人心。即便圣贤如孔子,其孔门也有九流之说
「注3」
,不说别的,孟子和荀子各持性善性恶之论,到几千年之后的我们也还争执不休呢。再说王阳明的心学,在其去世之后,由其弟子传其衣钵,进而延伸出浙中王门、江右王门与泰州学派等分支衍说,各派对王阳明学说的理解,也可以说众说纷纭。
如此说来,Eric Evans虽然开创了领域驱动设计的“门派”,但他“传”下的这门方法体系出现各种纷争、分歧与争议,就是非常正常的了。
但与思想哲学不同,像领域驱动设计这样的软件设计方法,有一个检验的唯一标准,就是它到底能帮助我们解决什么样的软件设计问题?其实,不管有啥纷争、分歧与争议,只要都认同领域驱动设计这个方法,在推进落地的时候有不同变化,都是可以的。不管是黑猫,还是白猫,能抓到老鼠的就是好猫。软件设计方法也当如此,能解决软件问题的方法,就是好方法。
“知行合一”是阳明心学的重要观点,我很期望自己能
以知行合一的方式推进和推广领域驱动设计
。“知是行之始
「注1」
”,一开始,我们需要了解领域驱动设计的必要知识;“行是知之成
「注1」
”,紧接着的实践又能促进知识的积累,使其变为自己真正掌握的知识。如此周而复始。
想要在学习和实践过程中提升“认知”,就非得把握这门方法体系的本质不可。那么,什么才是领域驱动设计的本质,这可又要众说纷纭了。还是以王阳明的心学来说,要抓住心学的本质,就要弄明白“良知说”的本体与功夫,这就引出阳明心学的四句教:
为善去恶是格物。
「注4」
虽说这四句教可谓阐释了心学本质,可对四句论述的解释同样很多,同样争论不休,甚至引出四有四无之争。我是心学的门外汉,无知者无畏,只管做大胆而浅显的蠡测。我把“心之体”解释为“本体目标”,“意之动”解释为“达成本体目标之原则”,“良知”是知,“格物”是行,然后将它们投射到领域驱动设计,就可得出:
控制复杂心之体
知识建模是格物
哈哈哈,这就是我的领域驱动设计心法。
让我进一步作阐释。
既然我将“心之体”解释为“本体目标”,那我们引入领域驱动设计的目标是什么呢?正如Eric Evans著作的副标题所言,就是控制软件开发的复杂度嘛,准确地说,是
控制业务复杂度
。毕竟,不是为了控制业务的复杂度,就没有必要引入领域驱动设计,那后面的内容也就无从谈起了。因此,
控制复杂是心之体
。
意之动,本意可解释为“心的动作",既然心之体为控制复杂,要采取的动作就应该去控制复杂度。控制复杂度的整个过程可不是一两句话能说清楚的,要解决的问题空间不同,解题方法自然不同,因此在所谓”心法“里,只能去其枝蔓,抓其首领,即掌握控制复杂度的基本原则,那就是
分治与抽象
。
领域驱动设计对分治的体现很明显,从问题空间到解空间,从顶层到细节,可概括为三个层次的分治:
-
问题空间的分治:划分为子领域,并区分为核心子领域、支撑子领域与通用子领域
-
解空间的分治:划分为限界上下文,并通过上下文映射指导限界上下文之间的协作
-
限界上下文的分治:单独提炼出领域层,以分解领域逻辑和技术实现,领域层内部划分为聚合,聚合之外形成领域对象的协作,聚合之内形成一个封闭的完整领域概念
领域驱动设计同样强调抽象,其核心是模型驱动设计,建模的过程,就是运用抽象的思想,把属于问题空间的各种领域概念抽象为领域模型。
本体有了,原则也有了,接下来再谈知与行。虽说”知行本是一体”,不可分开,但在讲解一个方法论的时候,还是只能分开来讲。
知是认识,对于领域驱动设计而言,如果没有认识到整个设计过程是“领域驱动”的,也就不可能行了,至少,就不是采用领域驱动设计了。这里声明,
领域驱动设计绝对不是银弹,也不是唯一行之有效的方法
,因此这里所谓的“
领域驱动是良知
”,是就领域驱动设计这个前提与范畴而提的,绝对不是一种排他性结论,认为只有领域驱动才是良知。这是误解。