DDD被高估 | Stefan Tilkov

21-03-02 banq

领域驱动设计(DDD)最近变得越来越流行,新书,会议演讲(甚至是专门针对它的完整会议)以及许多培训,从模式语言的最佳意义上讲,DDD为许多开发人员和设计人员在如何设计这件事情上给出了一个明确的名称,过去他们是无法可靠地、兼容地进行沟通。

但是,我对最近的事实也感到恼火,似乎每当有人谈论如何设计系统或服务边界,甚至只是提到非技术设计时,每个人都会被迫引进DDD专家:就像他们是唯一可以设计任何东西的超级英雄。这与您盲目地应用当前正在流行的解决方案的任何其他情况一样糟糕,这仅仅是因为这是每个人都在谈论的事情,而不是因为它是适合该工作的正确解决方案。DDD很棒,但是它只是您应该了解的许多工具和技术之一。

我认为人们还缺少一个更重要的方面,特别是当他们入门DDD时。DDD强调命名的重要性,它建议您在设计的上下文中争取一种通用的无所不在的语言。但是对于我们的领域(设计系统领域),它也有自己的语言。

DDD只是众多语言中一种可能的设计语言。将值称为值对象很有价值,促进沟通。但是,现有的、常见的DDD概念并不是您唯一应该考虑的概念,它们只是设计和架构系统的一个非常普遍特征的示例:提出并认识到模式,给他们起好名字,并使用它们来赋予系统结构和完整性。

如果在您自己的体系结构中,存在一种常见的模式,例如您使用过滤器将请求路由到处理程序,或者由代理处理的文档概念,这种现象可能一次又一次地发生在与“服务”或“仓储”相同的级别上,最终这种模式对您来说变得越来越重要。在我看来,我们可以并且应该发明自己的语言的概念,这比许多幼稚的DDD从业者认为的更为重要。如果您要做的只是按书定义应用现有DDD术语,并尝试要将任何问题塞入这个现有结构中,您将是一个非常可悲的设计师。

超越DDD!并非每个好的设计都需要由领域驱动(尽管我可以接受,它应该始终由域驱动,只是不一定在DDD的意义上)。即使您不是DDD专家,也可以设计好的系统。

 

网友讨论:

我不同意您的文章,或至少不同意的一些前提,我认为DDD词汇需要专家或专业知识,这意味着即使使用DDD语言也是一种“把关理论(gatekeeping theory)”。

DDD语言是一种真正意义上的模式语言,旨在将业务领域民主化(普及化),这与Alexander's旨在使架构民主化的方式相同。它是一种小巧易学的词汇,使发烧友可以进行交流。

 

术语不只是把关理论,而是关于精确度和不断变化的思维方式:使您以崭新的眼光看到事物。戴夫·斯诺登(Dave Snowden)也积极地这样做,因为语言具有很强的形成性。

 

我遇到了一些人(通常是高级架构师),他们往往使用“错误” DDD术语。我倾向于不太和那些人闲扯,看门人终会把关,无论是使用DDD术语还是使用其他语言表达相同意思的势利者。

 

目标是大家达成共识,通常涉及有人说“我不知道这意味着什么”或“我以前从未听过该词”之类的事情。当然,批评人们没有正确使用DDD术语会损害您进行有效探索所需的心理安全。

 

作为哲学迷,我喜欢拧一下这些人的鼻子-“恭喜!您如果在1953年就追上了维特根斯坦……”

 

一条推文的DDD:

  1. 同一工作或同一领域的人使用相似的词。与他们合作找到他们使用的术语行话。
  2. 不同的领域使用不同的词语。这些词语仅在自己的上下文中有效。
  3. 与领域中的单词词语保持一致。
  4. 确定上下文边界。

 

3
猜你喜欢