首先,我遵循的惯例是,有界上下文是部门的同义词,或者一个部门可能有1到多个有界上下文。
我们有一个有文件服务的客户咨询部门。文档存储在文档存储服务(公司中的所有文档都存储在其中-它是实用程序服务)中,文档服务存储关于该文档(业务服务)的信息。由于它是为客户咨询公司设计的,因此它是与客户有关的信息。
现在,健康和安全需要一个地方来存储有关文档的信息。这是不同的信息,客户咨询,但我已被指示扩大现有的服务,以说明这些额外的信息。我觉得这个服务现在跨越了一个有限的上下文。我担心的是,所有部门最终都会把信息储存在这里,服务会变得臃肿起来,对所有部门来说都是万事俱备。每个文档记录只存储信息的一个子集,因为它只属于一个部门。
当不同部门想要以不同的方式存储相同的信息,或者两个部门希望以相同的方式存储不同的信息时,情况会变得更糟。在我看来,这正是有界上下文的原因。
我认为每个部门都应该有自己的业务服务来获取有关文档的信息,但是使用相同的实用程序服务来实际存储文档。
正确的方法是什么?
发布于 2012-12-16 06:54:50
您可能刚刚确定了对一个函数的需求,它不是特定于任何一个部门,而是形成了一种基本的基础结构。考虑形成一个有限制的上下文“基本基础设施”,并在那里分配文档服务。这样,不同的上下文之间就有明确的边界和依赖关系。基本文档服务仍然可以被任何部门使用,而不会影响您的设计。
考虑在更通用的文档服务之上的特定实现,以处理特定于某个部门的功能(或者更确切地说:业务功能)。然后,这些特定的实现将属于各自的有界上下文。例如。
例如,客户端和健康与安全实现将验证和处理它们的特定参数,然后使用通用服务来最终存储文档。
注:一般情况下,部门等业务组织结构并不能形成良好的界限。理由:组织结构往往会随着时间的推移而改变,这种变化很可能会使先前确定的边界失效。相反,最好确定核心业务功能,并将这些功能分组到逻辑上具有凝聚力的块中。
发布于 2012-11-15 04:19:08
您的文档信息服务没有理由不能被设计成存储在其中的信息片段在它们各自有限的上下文中。事实上,我认为如果系统不是这样设计的话,这将是您计划如何设计系统的自然结果。
如果您的系统有登录名或组,并且文档保存在创建它们的登录/组中,那么这将达到上述目标。
我在把你的文档信息系统和公司的wiki进行比较。一个wiki可以被整个1000名以上的雇佣组织使用,它可能包含对一个人非常重要但对另一个人完全胡言乱语的页面,但是一切都很好,因为各个业务部门通常在wiki上都有自己的页面,而其他业务单位忽略了或者甚至不知道。
是的,您可能需要扩展您的应用程序,以涵盖更广泛和更广泛的受众,但这是任何实际应用程序的目标/噩梦。想一想任何数据库系统-它的目标是解决每个人的数据存储问题无处不在。他们做得多好是值得商榷的,但他们不可能失败,因为每个人都在使用它们。
https://softwareengineering.stackexchange.com/questions/170394
复制相似问题