web-dev-qa-db-ja.com

プロパティの組み合わせを含むオブジェクトの作成を含むシステムにクラス図を提供するにはどうすればよいですか?

組織階層管理を含むシステムを設計しています。システムには、ユーザー、管理者、マネージャー、調達部門の4つの役割があります。

Current class diagram

各組織の管理者に、システムで事前定義されたタスクと特権を使用して新しいロールを作成することにより、独自の階層を作成させようとしています。

たとえば、管理者はユーザーと調達部門の間に、市場調査責任者という名前のユーザーを追加できます。管理者は、システムで事前定義されている購入リクエストの承認など、この新しいユーザータスクを割り当てます。

このシステムのクラス図を作成しようとしていますが、作成する新しいロールを表す方法がわかりません。どんな助けでもありがたいです。前もって感謝します。

3
Abdulaziz Yesuf

あなたが持っている問題は、ユーザーの概念と役割の概念をマージすることです。したがって、同じ人が複数のタスクで調達の責任者である場合、その人はいくつかの無関係なオブジェクトを持っています。

最初のステップは、たとえば次のように、懸念事項を適切に分離することです。

enter image description here

ご覧のとおり、特定の役割とより一般的な概念との混乱を避けるために、最初の「ユーザー」を「寄稿者」に名前を変更しました(たとえば、addUser()はあるがaddManager()addHeadOfProcurement())。

この設計により柔軟性が向上しますが、アプリケーションにはいくつかの制約を適用する機会があります(たとえば、監査人がいくつかの 職務の分離 を適用することを望む場合)。

それにもかかわらず、この設計は依然として事前定義された役割に依存しています。管理者は新しいロールを作成できませんでしたが、クラスモデルで利用可能なロールを再利用するだけです。

管理者が新しいロールを作成できるように、より高いレベルの柔軟性が必要な場合は、次のことを実行できます。

  • いずれかの entity-component-system 設計をロールに採用します。それは、継承の代わりにコンポーネントの合成を使用することを意味します。コンポーネントは、入札の表示、コンテンツの投稿、何かの承認、承認のリセットなど、個々の責任または行動です。
  • または、ロールをサブロールの composite として定義し、タスクの最も基本的な責任となるいくつかの事前定義されたリーフロールまで。

もちろん、この追加の柔軟性により、さらに複雑なレイヤーが追加されます。

4
Christophe