通用的人員和組織結構模型

weixin_34402090發表於2012-02-24

感謝 Martin Fowler,很多想法來自他的《分析模式》(Analysis Patterns)

目的

企業架構的出發點是業務,業務實現的關鍵是人,業務關係的理順靠組織架構。

在企業IT整合的過程中,對於人員和組織機構資訊的整合是一個重點。但是目前的解決方案中往往偏重於“系統使用者”的整合,而對組織架構沒有考慮或者考慮得很少,同時對於包含客戶、合作伙伴等在內的虛擬組織往往支援不夠。組織架構、崗位的設定等資訊往往牽扯到許可權,因此有必要探討一種統一的人員和組織機構模型,既可以作為此類資料的統一資料來源,也可以為之後的統一許可權管理打下基礎。

 

領域模型

  • 主體

企業的基本組成單位是人(Person),包括員工、合作伙伴、經紀人/代理人、外包人員、客戶等;為了人們之間更好的協作還會設立一些組織單元(Unit),如部門、分公司、子公司、營業部、委員會、工作組、專案組等;在部門之中還會設定一些崗位(Position)。

這些物件都是業務行為的主體(Subject)。所謂主體,可以被託付給相應的責任,而責任體現了他們之間一種具有共性的關係。

主體

 

  • 責任

這種共性的關係就是一種責任(Accountbility)關係:委託者將責任託付給受託者。具體表現為很多形式,比如部門之間的上下級關係,人員和部門的從屬關係,企業和客戶的業務關係,企業和合作夥伴的協作關係等等。這種責任關係通常會有一個期限(Period),記錄期限資訊可以幫助我們記錄責任關係(如組織結構、人員歷任職務)的變化。

責任

 

  • 知識級:業務規則的體現

上述的責任關係太泛化了,而且缺少必要的約束。比如,組織的層級結構約束,所以需要引入知識級的模型物件。知識級體現定義和規則,操作級記錄實際發生的事情。

知識級的作用:

1. 管理複雜性,將複雜的業務規則放到知識級

2. 動靜分離:知識級處理相對固定的部分,操作級處理變化頻繁(相對知識級來說)的部分,即具體的配置。

3. 知識級約束操作級的行為。

 

在知識級引入主體型別SubjectType,就可以通過型別來約束主體(Subject)的行為。其中最重要的約束就是委託關係(Commission)的定義。委託關係約束了責任(Accountbility)的規則,比如,有一類責任來自產品的層級關係,而另一類責任來自銷售的層級關係,就可以定義“產品層級”和“銷售層級”這兩個Commission,來將Accountbility區分成不同的型別。

顯然,委託關係是主體型別之間的many-to-many關係,因為還需要在委託關係上進一步進行定義,所以定義一個關聯類:Commission,關聯到主體型別之間的many-to-many關係上。

每一個責任關係都應該由唯一的委託關係來定義,即委託關係是責任關係的型別。

 

引入知識級帶來的一個工作就是:在設計階段就要考慮知識級的初始化。因為知識級的例項中隱藏了設計(知識)。

知識級

 

  • 主體型別泛化

在初始化知識級物件的時候,我們很容易想到:組織單元(Unit)是一種主體型別,其委託關係包括:下級組織單元(預設)。

但是如果再細分下去,可能會定義總公司,分公司,營業部,而對這些組織單元還需要定義其下級組織單元(預設)的委託關係。、下級組織單元(產品層級)、下級組織單元(銷售層級)

這樣做很容易引起模型的膨脹,使得初始化知識級變得非常痛苦。所以,引入主體型別之間的泛化關係(Minxin)就顯得很有必要。允許主體型別之間的一種“多重繼承”,可以避免這樣的麻煩。

 

另外一種情況是兼職。隨著現代企業的發展,人員在企業中的定位可能是多面性的,兼職的情況越來越經常出現,但是大家都視為特殊情況而很少進行有效的處理。比如這樣一種情況:資訊中心總經理兼任CIO兼任創新委員會成員。在不考慮兼職的時候,我們會建立資訊中心總經理的崗位,CIO的崗位,創新委員會的組織單元。並使具體的人(Person)與這些主體之間具有任命或小組成員這樣的關聯。一旦出現了兼職,就需要建立一個複合的、繼承上述三者主體型別的一種“新”型別。這顯然很醜陋。

解決的辦法就是允許主體具有多種型別。考慮到大多數情況是沒有兼職的,所以在主體和主體型別之間建立兩個關聯:主要型別,所有型別。

 

主體型別泛化

 

  • 層級型委託關係

責任模式在靈活性的同時缺少了約束規則。比如,對一個嚴格的銷售關係層級序列:總公司-分公司-區域子公司-部門-銷售辦事處。這種層級序列實際上是對委託關係的約束。要表達這種約束,可能每個層級的組織機構都要定義兩種委託關係:上級-->自身,自身-->下級。這樣的實現比較笨拙。

為了簡化對層級關係的處理,可以定義一個層級的委託關係(LeveledCommission),該委託關係維護一個主體型別的列表,並規定級別列表中上級類別的主體只能向下級類別的主體負責。

思考:在實際設計時,可能會根據需要構建委託關係的多個子類,處理各種約束規則,以便於模型的使用。

層級型委託關係

 

  • 操作和崗位

責任和權利總是對應的。通常,責任對應一系列的操作(Operation)。對Operation的細化(如對應的系統、地點、動作、資源等)通常在許可權管理的相關模型中進行。但是在通用組織機構模型中,需要專門提到的是崗位(Position)。

如前所述,崗位Position也是一種主體,人和崗位之間存在一種任命/聘用關係,崗位由組織單元(Unit)設定。但同時,崗位也體現了對操作的聚合。通過將責任關聯到崗位而不是具體的人,就可以間接地把操作聚合到崗位。

在RBAC(基於角色的訪問控制)模型中,角色的很重要的一個來源就是崗位。

職位和操作

 

 

小結

模型的全貌:

All

 

特別要注意的是,這裡只是一個邏輯模型,要實現該模型還需要具體的設計。

 

 

相關文章