埃文的书,pg. 415:
Also,the critical aspects of the domain model may span multiple
Bounded Contexts,but by definition these distinct models can’t be
structured to show their common focus.
a)我假设引用暗示Core Domain CD可以跨越几个有界上下文BC?
b)我认为CD中的BCs只应包含核心元素,但不包含通用元素?如果是这样,那是不是意味着我们应该始终设计具有核心域的BC(CD包含的那些)?换句话说,在我们开始设计BC之前,我们应该对CD是什么有一个大概的了解?
C)
… but by definition these distinct models can’t be structured to
show their common focus
我意识到BC不应该被构造成外部世界能够立即弄清楚所有部分(即BC)如何组合在一起以及它们的共同目的是什么,但是作者暗示这样的结构(它会隐含地传达)不同的BC的共同目的即使偶然也不会发生?如果是这样,为什么?
2)域模型可能有几个通用子域GS,但是单个GS可以跨多个BC吗?
更新:
1)
b)
I assume BCs within CD should only contain core elements,but no
generic elements? …
人们当然应该知道核心领域是什么时候
定义BC.如上所述,理想情况下,它们应该是一对一的.但是,一个
可以定义BC以满足非理想系统的需要
州.我假设你暗示在非理想情况下,CD中的BC也可能包含一些非核心元素,而且在非理想情况下CD可能包含多个BC?
C)
A domain spans multiple BCs but despite explicit boundaries,domain
behavior can certainly span BCs. A context map can describe such
cross-BC interactions. The quote itself is based around the idea of a
domain vision statement the purpose of which is to highlight the value
of the core domain and possibly explain the relationship to BCs.但是,为什么作者使用“按定义”这个术语,好像意味着不可能意外地将BC组织起来以便他们能够展示他们的共同焦点?
2)
Domain Model may have several Generic Subdomains GSs,but can a
single GS span multiple BCs?
多个BC可以使用单个通用子域.我会
避免使用“跨度”一词,因为这过分强调了重要性
整个域模型的通用子域.一个)
Multiple BCs can make use of a single generic sub-domain
不确定我理解你的回复.你是说单个GS可以包含多个* BC *?
b)
I would avoid the term “spans” here because that overemphasizes the
importance of the generic sub-domain for the entire domain model.也许是一个无用的问题,但你能详细说明为什么使用术语“span”会使Generic Subdomain看起来比它实际上更重要吗?
回复Giacomo Tesio:
1)
b)
No,some generic elements often play a key role in the Core Domain.
See for example Time,Currency and Money that are present in many
Shared Kernel: they are really generic but important to the Core
Domain rules.因此,如果核心域也使用通用元素(例如时间,货币和货币),那么只有实现选项是共享内核(即,这个通用元素由Core Domain和需要它的任何其他子域共享),但是如果泛型元素仅由Core Domain使用,那么我们不应该打扰共享内核,而应该直接在Core Domain中定义这个泛型元素?
1)
c) Context boundaries are defined after term’s semantics. In a BC,no
term should mean more than one thing (see SRP). When you see that a
class has more than one meaning in the domain expert’s mind,you know
that you have mixed differnt BC.您能否稍微扩展一下您的答案,因为我无法理解您的答案与我的问题有什么关系?
第二次更新:
1)
b)
It may also be that a single BC contains multiple sub-domains. This is
usually not ideal because it likely indicates a conflated BC.在阅读这本书时,我并没有太注意作者对“子域”这个术语的用法,但我很确定这本书没有提供子域名的全面定义.那究竟什么是子域?只是一堆逻辑相关的域名概念?如果是,那么我假设一个子域不应该跨越几个BC?
2)
一个)
A signle GS can be used by multiple BCs. This is so because the
sub-domain is generic. So the GS doesn’t contain the BCs; instead,it
is referenced by the BCs.从您的回复中,您似乎暗示通用子域永远不会被实现为BC?为什么不,因为在我看来,不同的通用子域可能包含不同的模型,而BC似乎是分离这些通用模型的理想解决方案?!
3)
你能帮我解决下面这个问题,因为它让我很困惑:如果核心域也使用泛型元素(如时间,货币和金钱),那么只有实现选项是共享内核(即这个通用元素是由Core Domain和任何其他需要它的子域共享,但如果通用元素仅由Core Domain使用,而应该直接在Core Domain中定义这个泛型元素?谢谢
解决方法
1b)在定义BC时,当然应该知道核心域是什么.如上所述,它们应该是一对一的.然而,可以定义BC以满足处于非理想状态的系统的需要.
1c)域跨越多个BC但是尽管有明确的边界,域行为当然可以跨越BC.上下文映射可以描述这种跨BC交互.引用本身基于域视觉声明的概念,其目的是突出核心域的价值并可能解释与BC的关系.
2)多个BC可以使用单个通用子域.我会在这里避免使用术语“跨度”,因为这过分强调了通用子域对整个域模型的重要性.
UPDATE
1b)核心域可能是用多个有界上下文实现的.这不一定是缺陷,在某些情况下是理想的.也可能是单个BC包含多个子域.这通常不理想,因为它可能表明BC混为一谈.
1c)根据定义,BC是物理分区的,不应具有直接依赖性.我认为这是作者所指的.他强调的问题是你可以有多个BC在发挥作用,这需要解释,特别是当一个子域被解决时.
2a)单个GS可以由多个BC使用.这是因为子域是通用的.所以GS不包含BC;相反,它由BC引用.
2b)具有通用子域“跨越”系统可以指示它实际上不是通用子域,而是核心域.这并不是说通用组件不能在整个系统中使用,恰恰相反.但是,在这种情况下,跨越系统的组件只是一个技术轴.
更新2
1b)是的,子域是整个域的一个有凝聚力的组成部分.子域可以跨越多个BC.这是可以接受的,因为BC是解决方案空间工件,可能存在技术原因甚至组织问题.例如,在在线零售商的域中,存在产品目录子域.这将有相应的产品BC.但是,有关产品搜索的其他功能可以放入产品搜索BC中.这仍然是目录子域的一部分,但由于技术原因而成为新的BC.另一方面,当单个BC包含多个子域时,这可能是有问题的.
2a)我认为我对词语span的使用过于语义化了.通用子域可以是BC.但是,必须注意确保通用子域实际上以通用方式使用.
3)是的.除此之外,像Money这样的基类可以为每个子域唯一地实现,即使它们在多个地方使用.有时复制和粘贴是最好的模式.