从广义上讲,领域(Domain)即是一个组织所做的事情以及其中所包含的一切。商业机构通常会确定一个市场,然后在这个市场中销售产品和服务。每个组织都有它自己的业务范围和做事方式。这个业务范围以及在其中所进行的活动便是领域。当你为某个组织开发软件时,你面对的便是这个组织的领域。这个领域对于你来说应该是明晰的,因为你在这个领域中工作。
通常情况,我们可以把一个行业看成是一个领域,不同的行业是不同的领域。
也可以把同一个行业中,不同的生产环节,看成是不同的领域。
至于领域的划分,没有通用的标准,视具体情况而定。
领域的划分可大可小,领域又可以包含更小的领域(子域),子域也可以细分成更细的领域。
一个大型的企业系统,由很大领域组成,按照业务价值,可以将领域归类为核心域、支撑域、通用域。
核心域是业务价值的核心,举个例子,核心域相当于公司的赚钱部门。
支撑域包含了一个业务价值,主要是为核心域提供支持,支撑域相当于公司的行政部门。
通用域基本不包含业务,或者只包含了有限的基础业务,支持是为核心域、通用域提供技术支持,通用域相当于公司的物业管理。
下面,通过一些对话描述,领域到底是什么?
老板:XXX,你觉得我们公司进军电力能源市场,怎么样?
员工:boss,我觉得电力能源这个领域太大了,说能具体些吗?
老板:我们是做天燃气起家的,在天燃气这个领域里面,市场份额已经是固定了。我们能否向着天燃气发电这个领域发展新业务呢?
员工:boss,天燃气领域与天燃气发电领域虽然有着相通之处,但是毕竟是属于两个不同的领域,我们如果贸然进军,可能会损失很大。
员工:天燃气发电,又是一个很大的领域。是做民用电领域,还是做企业用电领域?
老板:企业用电领域?
员工:企业用电领域,这就好办些了,毕竟以我们公司在政府中的影响力,项目还是容易拿到的。
员工:天燃气企业用电领域,其中涉及到好多领域。天燃气领域(开采领域、输送领域)、企业资质领域、项目与工程管理领域、发电领域、输电领域、计费领域,等等,我们的优势只是天燃气相关的领域,其他的领域,我们都需要大量招纳人才。
员工:boss,如果我们有足够的资金,能承受住未来三年的负利润,那么,我觉得我们是可以进军天燃气企业用电领域的。
老板:en……(三年的负利润)让我仔细想想!
现在,你应该知道什么是领域了吧。
那么,该如何践行DDD中的领域呢?
领域是充满着业务知识在里面,因此,首先需要把熟悉业务的人员(领域专家)融入到团队中,让领域专家充分参与到解软件开发,在领域专家的带领下,才能把领域模型构建起来。
方法虽然简单,但是却有一个重要的前提,就是业务人员、开发人员,都必须转换己方固有的思维逻辑,业务人员需要学会怎么样用软件思维去思考问题,开发人员需要学会如何用业务的思维去思考问题。