组织结构的领域建模 (2): “机构”的抽象
通过对不同类型的组织实体抽象出“机构(Organization)”这个抽象,可以得到一个更完善的模型。
上一篇文章中,我们根据直觉对组织结构进行了建模,但模型存在以下的缺陷:
- 未能以直观、一致的方式处理岗位归属问题;
- 未能以直观、一致的方式处理组织层级问题;
- 未能以统一的方式支持企业型和各种非企业型组织。
对于上述问题,“抽象”是最好的解决手段。
经过研究,我们可以发现,公司和部门下面都可以设立岗位,这方面的共性表明公司和部门属于同一种类型的领域实体,这里存在一个缺失的抽象。我们可以将这个抽象命名为“机构(Organization)”,而公司和部门都是机构的子类型。这样,岗位就可以从公司和部门中独立出来,向上迁移到它们的父类——机构上,从而形成下面的领域模型:
从上面的模型可以看出:
- 每个机构拥有多个岗位,每个岗位属于一个机构(公司、部门或其他机构类型);
- 机构有各种子类型,包括公司和部门;
- 机构之间形成上下级关系——一个机构可能包含多个下属机构(图中用children表示,公司的下属机构可能是各种部门,还可能有分、子公司;部门的下属机构可能是次级部门,例如人力资源部下面可能包含薪酬福利科和招聘科),每个机构可能有一个上级机构(图中用parent表示),顶级机构(总公司)没有上级机构。机构之间的层级的数量没有限制。
通过“机构”抽象,上面的模型优雅地解决了岗位归属的一致性问题,也解决了组织层级的一致性问题,与此同时,它也为企业组织之外的组织类型提供了解决方案。下面重点讨论最后这一个方面。
由于我们将组织结构的关键方面——岗位设置和组织层级——统一定义在机构这个基类上,我们得以将机构实体抽取出来,与岗位、员工等领域实体一起,组成核心域,在不同类型的组织中重用。当针对不同类型的组织建模时,在一个扩展域中定义机构的不同子类型,与公共的核心域组合,就可以应对不同类型的组织。这样的做法使得我们既可以重用核心业务逻辑,又可以针对不同类型的组织提供扩展。
例如针对企业组织,有公司、部门等机构类型,我们可以这样建模:
而针对高校组织,有大学、学院、系、专业、处室等机构类型,可以这样建模:
通过抽象出“机构”这个概念,我们非常优雅地解决了上一个模型的三个问题。