您如何与域专家协商域模型?

时间:2009-01-01 05:53:59

标签: model dns domain-driven-design

假设您正在与客户的域专家合作。你意识到(或至少有一个合理的信念)你的问题模型比他们的模型更清晰。你如何让他们相信他们应该顺其自然。

就我而言,很明显要求的主要内容是什么(例如产品的交易系统)。根据我的经验和我的研究,我会推荐一个有两个TraderParties的TradeContract。每个TraderParty购买一个产品并销售一个产品。如果我必须用XML建模合成,我可以将其建模为:

<tradeContract>
    <id>1234</id>
    <tradeParty>
       <id>1</id>
       <name>Ann</name>
       <long type="money" value="20.00"/>
       <short reference="book.123"/>
    </tradeParty>
    <tradeParty>
       <id>2</id>
       <name>Bob</name>
       <long reference="book.123"/>
       <short type="money" value="20.00"/>
    </tradeParty>
    <product>
       <id key="book.123">123</id>
       <type>book</type>
       <title>Harry Potter and the Prisoner of Azkaban</title>
    </product>
</tradeContract>

上面简单地模拟了Ann以20.00美元的价格从Bob手中购买了 Harry Potter和Azkaban的囚犯。更抽象的是,这是一个两方四腿交易的模型。让我们假设为了论证,使用XML的系统验证tradeContract并协调交易。

如果您的域名专家觉得这对他们来说太复杂了怎么办?虽然你可以很容易地承认一些中间步骤来进入上述领域模型,但是你如何说服他们最好“咬紧牙关”并尽快使用上述领域模型?

附加:中小企业提出的模式......

领域专家一直在谈论的是我提出的模型,但看起来他们认为他们的业务流程还没有准备好。 (尽管如此,我认为现在有办法做到。)

他们想要立即的模型是:

<tradeParty>
   <id>1</id>
   <name>Ann</name>
   <transaction type="long" product="money" value="20.00"/>
</tradeParty>

Ann的这款车型赠送了20美元。然后必须输入单独的事务:

<tradeParty>
   <id>1</id>
   <name>Ann</name>
   <transaction type="short" product="book" reference="book.123"/>
</tradeParty>

模仿她获得了哈利波特的书。在我看来相当麻烦,因为我们无法模拟我们的系统是否会欺骗安。同样,在交易合同的鲍勃方面也发生了类似的交易碎片。

2 个答案:

答案 0 :(得分:2)

我从不尝试改变领域的专家心理模型......毕竟他们是专家。但是,如果我将它的模型与它们的模型略有不同,那么我确保它仍然可以产生相同的效果。所以我接受他们的观点,以我自己的方式建模,然后以他们理解的方式呈现给他们。

从技术角度到面向业务的角度总是会有这样的翻译。这是您的业务分析师的角色。

您的域名专家提出的模型是什么?如果您说您的模型捕获了需求,那么使用您的模型,但使用技术较少的视图呈现领域专家...而是使用图表。他们不必知道从图中生成的XML。

答案 1 :(得分:1)

  

我从不尝试改变领域的专家心理模型......毕竟他们是专家。

我认为这绝对是正确的。但是,我知道认为领域专家不像我那样“得到它”的感觉。虽然很容易将这一点归结为他们不了解技术方面,但往往这是一个标志,而不是开发人员和领域专家之间的沟通达不到标准。这可能非常危险。

如果您认为哪种方式最有效以及领域专家想要什么之间存在巨大的脱节,那么您可能错过了他们可能认为理所当然的域的关键部分。尝试从不同角度询问问题。有时你会通过另一条推理路径获得不同的结果。灯泡可能继续存在,突然间你会比以前对问题有更好的理解,因此你可以更好地与领域专家沟通。

  

您的域名专家提出的模型是什么?

我认为这也很有意思。