1.1 问题域与解答域
领域建模是帮助你分析、理解并识别某项具体活动所有参与方的活动。第一步从问题域入手,确定领域中的实体如何与其他实体进行有意义的互动。在咖啡店的例子里,你点单时用了该领域最自然的语言,用了与店员的知识最贴近的专门用语。术语构成了问题域的核心实体。咖啡店店员之所以能顺利给你提供相应饮料,正是因为你们俩都熟悉必要的专门用语。
1.1.1 问题域
在领域建模活动中,问题域指构成你所分析业务的那些过程、实体和约束条件。领域建模,也称领域分析(参见1.9节文献[1]),就是要识别出领域中所有的重要元素以及它们之间的协作关系。在前面的例子中,店员掌握了构成其问题域的所有实体,如咖啡、打发鲜奶油、肉桂、脱脂奶等。如果要分析一个更复杂的领域,比如金融中介的交易结算系统,那么证券、股票、债券、交易、结算就是其中的一些元素。除了这些,你还要研究证券如何发行、在交易所买卖、在各交易方之间结算、记录到各种账册和户头。你需要先确认这些协作关系,然后进行分析并把结果作为分析模型的产物记入文档。
1.1.2 解答域
问题域的分析模型是用解答域提供的工具和手段实现出来的。你只要点单,店员就懂得该如何制作相应咖啡。她所遵守的制作过程以及使用的工具就是其解答域的构成成分。面对的问题域越大,你可能就越需要从解答域寻求更多工具、方法学和技术手段方面的支持。问题域的元素需要映射成解答域中适当的技术手段。如果将面向对象方法作为解答域的基本平台,那么类、对象和方法就是解答域的基本组件。你可以把这些组件组合成大一点的组件,而后者可能正好能更好地表示问题域更高一层的元素。图1-1描绘了领域建模的第一步。如何从问题域出发,运用领域专家能理解的技术手段,完成向解答域转换的全过程?随着学习的不断推进,你对此过程的理解会逐渐加深。
图1-1 问题域的实体和协作关系必须映射成解答域中相应的制品。图中左边的实体(证券、交易、结算等)需要在右边能找到对应的表示
领域建模的基本实践活动就是把问题域映射到解答域的若干制品,让所有的元素、相互作用和协作关系都得到正确而合理的表示。为此,你首先要把领域对象按合理的粒度归类。当分类正确时,问题域的每个对象及其结构和语义都能在解答域找到对应项。不过,映射的效果无法超越作为两个领域之间互动媒介的语言的表现力。可靠的互动要求问题域与解答域分享一套共通的语汇。