« 残高テーブルの設計と統計処理 | トップページ | 大震災 »

2011.03.05

メニューは「権限のインタフェース」である

 「メニュー」はサブシステム構成やデータモデルなどとともに、基本設計においてないがしろにされている定義要素である。システムテストが終わる頃になって「そろそろメニュー構成を決めるためにユーザと打ち合わせしないといけないな」なんて調子のプロジェクトもある。そうでなくても、どんな基準でメニューを切り出すかが曖昧なプロジェクトは多い。たいていは「業務上同種の機能をなんとなく便利そうにまとめたもの」程度の認識でしか扱われていない。

 コンプライアンスがやかましく言われている現在、メニュー設計において「権限」を意識しないわけにはいかない。たとえば、「業務上同種の機能」であっても「使用権限の異なる機能」というものがあり得る。そのような機能が同一のメニューに混在していてはいけない。そして、所属するサブシステムが異なる機能であっても、権限が同じものであれば同一のメニューに載ってもかまわない(つまり、サブシステム構成の問題は業務権限の問題と無関係である)。

 具体例で見よう。仕入実績にもとづいて支払処理を行うための「支払業務メニュー」があるとする。この上に以下の意味合いのメニューオプションが混在しているとする。

1.仕入実績にもとづく支払依頼データの生成処理
2.支払依頼の承認入力
3.承認済支払依頼にもとづく支払指示処理

 これらは同一のサブシステムに含まれるとしても、使用権限がいかにも異なりそうな機能だ。1は購買担当者、2は購買部のマネージャー、3は経理の支払担当者の職掌であろう。想像すればわかるとおり、2や3までを購買担当者がやれるようであれば、横領など容易にできてしまう。悪事を働けると気づいてしまえる制度やシステムを提供してはいけない。それは利用者のモラルを疑うゆえではなく、人間の弱さに配慮するためだ。

 つまりメニューは「業務上同種の機能をなんとなく便利そうにまとめたもの」ではなく、「権限が同一であるようないくつかの業務を遂行するために用いる機能をまとめたもの」である。その体系を事前に、つまり誰がどのメニューを利用するかが決まる以前の段階で決めることが、メニュー設計の中心課題だ(もちろん「アジャイル」に決まってゆくものではない)。そしてその体系は、システムが提供する無数の機能(メソッド)に対する使用制約を表すインタフェースとなる。

 昔、ユーザ毎に「どの機能を利用可能にするか」を保持するテーブルが用意されているシステムにかかわったことがある。ユーザがメニュー経由でほぼすべての機能にアクセスできるようになっていて、アクセスされた機能が起動されると、この機能に対する使用権限がそのユーザにあるかどうかが毎回チェックされる。権限がない場合には、スタックが積みあがっていようがいきなりアベンドする。これなど、上記の「権限」をユーザと機能の組み合わせに詳細化してしまった悪い例だ。そういうやり方ではなく、いくつかの機能のまとまりごとに権限上の意味を持たせ、それをユーザに個別に認可するやり方のほうがいい。

 そうすることで、職場で定義された「権限のインタフェースの実体」として「メニュー」を扱えるようになる。ユーザ毎に利用可能な機能を個々に認可するやりかたでは、システムが無駄に複雑になるだけの話では済まない。権限インタフェースが、確立された体系上の「発注者権限」等ではなく「山田一郎さん権限」のように個々のインスタンスとしてしか扱えない。業務上の権限というものは、実ユーザから独立して体系化され実体化されていたほうが管理・監査しやすい。

 XEAD Driver上で構築中の販売管理システムから、メニュー構成の例を示そう。「発注管理メニュー」と「購買部長メニュー」と「経理メニュー」のそれぞれに、上述の機能が分散配置されている。

Menu1

Menu2

Menu3

 なお、この例ではすべてのメニュータブを含むパネルが現れるているが、それはこのユーザがたまたまシステム管理者であるゆえだ。ふつうのユーザ向けには、これらのメニュータブのうちの1個か数個程度しか含まれないだろう。どのメニュータブを利用可能とするかはユーザ定義に含まれる属性で、システム管理者によって次のパネルで設定される。

Menu4

 メニューをおろそかにしてはいけない。業務システムのメニュー構成を見れば、設計者が何を考えていて何を考えていないかがよくわかる。設計者の技量が剥きだしになる怖いものが3つある。サブシステム構成、データモデル、そしてメニュー。この中でもメニューがいちばんひとの目に触れやすい。

|

« 残高テーブルの設計と統計処理 | トップページ | 大震災 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: メニューは「権限のインタフェース」である:

« 残高テーブルの設計と統計処理 | トップページ | 大震災 »