我在软件体系结构(“领域-模型”、“领域驱动-设计”等)的上下文中看到了这个术语。我搜索过它,但是我得到了很多不同的定义。那到底是什么?
发布于 2017-10-23 20:11:29
由Evans编写的领域驱动设计书中的“域”一词有着特定的含义。这就是软件的意义所在。
不过埃文斯走得更远了。在他看来,即使使用相同的软件,也有子域。这是这本书中关于“战略设计”的部分。
有三个“域”:核心域、支持域和泛型域。有时他会把这些称为子域。
Evans还非常关心软件背后的实际业务,这本书不仅针对开发人员,也针对架构师和管理人员,他们需要了解软件和业务如何协同工作,这就是他在讨论战略设计和这些子领域时所关心的问题。
因此,核心领域是软件的一部分,它既代表了软件的竞争优势,又代表了软件的“存在理由”。这是软件的一部分,这就是为什么客户会购买软件而不是其他软件。通常,Evans将其视为包含最小代码百分比的域。你可以认为这是最重要的20%。这是你不能真正买到的部分,它可能只是一个模块或整体软件的组成部分。
支持领域仍然很重要,对组织来说是唯一的,但不像核心领域那么重要。没有它,软件就不会那么有价值,而核心也依赖于它。它可以是您自己编写的软件中的多个模块,并且对核心执行重要但支持的功能。
泛型域是最不定制的,在某种意义上也是软件中最不重要的部分。您可能已经写在内部,但它可能是更有效的购买它从货架上,或使用著名的开源软件。该系统的这一部分可能并不是特定于您的整个域,因此,例如,无论您有一个运送系统来运送包裹,还是有一个健康记录系统来管理病人,通用域是这些系统中常见的部分,只需要在那里运行即可。这可能占了整个系统的大部分,但不一定是这样。
从业务的角度来看,确定您的核心领域并将您的开发资源集中在那里是非常重要的。埃文斯有很多视频,特别是在InfoQ网站上,他在那里更详细地解释了这些概念。
因此,当我们经常在软件中谈论“域”时,对于DDD来说,它并不像看起来那么简单。
我应该指出,DDD的概念并不一定存在于更广泛的软件社区中。其他开发人员、作者和产品人员可能有不同的想法和定义,有些更微妙,有些更少。即使是写过DDD的其他作者也可能在Evans的书中掩盖这些概念,但我认为这些概念在编写和规划软件项目时仍然很有用。
发布于 2017-10-23 18:06:07
发布于 2017-10-23 18:02:42
它仅仅意味着你正在工作的问题空间。例如,如果您正在构建一个电子商务网站,您的域名将是“电子商务”,并将涉及与您的客户/公司的销售实践相关的过程。因此,域模型将表示产品、发票或发货记录。
https://softwareengineering.stackexchange.com/questions/359592
复制相似问题