質問

管理システムのドメインモデルを作成しようとしています。このシステムには次の種類の人々がいます。

employee
manager
top mananger

私は定義することにしました User, 、 どこから Employee, ManagerTop Manager から専門となります。今、私はどんな種類の専門階層から選ぶべきかわかりません。次の方法を決めることはできません。

alt text

また

alt text

どちらが望ましいかもしれませんが、なぜですか?

長年のコーダーとして、ドメインモデルをやろうとするたびに、私はこれをどのようにコーディングするかについて考えようとするという考えと戦わなければなりません。私が理解したことから、オブジェクトの関係でのみ、ドメインモデルの問題について考えるべきではありません。ここでは、コードの複製やこれらの種類の詳細のいずれかを考える必要はないので、他のオプションよりも実際に選択することはできません。

ありがとう

編集:

もう少し明確になります。これは、労働者の休暇計画を管理するプログラムです。このプログラムを使用すると、従業員はその年の休暇のセットを選択できます。その後、マネージャーは従業員のそれぞれについてそれらの日を承認するかどうかを承認するかどうか、一日の終わりには、トップマネージャーがマネージャーの決定を承認または不承認にする必要があります。これは、私のプログラムのすべてのユーザーができるはずです。他のタスクはありません。

役に立ちましたか?

解決

これは主に、あなたがあなたの用語をどのように定義するかという問題に帰着します。基本的な質問は、可能性のある状況下で、および 正確 職場のルールがモデル化されているため、それについて何らかの方法で言うことは不可能です。

一般的な概念の1つは、少なくとも特定の時点まで、マネージャーが彼の部下のいずれかの仕事をできるはずであるということです(少なくとも1つのレベル、そしておそらく2つまたは3つ)。

一方、組合主導のルールがたくさんある場所では、まったくそうではないかもしれません。人が完全に仕事をすることができたとしても、ルールは彼がその立場に置き換えることを妨げる可能性があります。場合によっては、これは認証要件などから生じます(たとえば、マネージャーは作業を行う資格があるかもしれませんが、必要な認定は失効しています)または組合規則のようなもの(例えば、かつてre責された私の友人がかつてre責された友人でした。彼は、会社の店舗から懐中電灯の電球とバッテリーを彼のために行うためにユニオンマテリアルハンドラーを手に入れるのではなく、ラボに戻しました)。

他のヒント

実生活では、マネージャーも従業員です。したがって、これは確かに専門化の増加のチェーンにすぎません。

User -> Employee -> Manager -> Top Manager 

編集

「これは、労働者の休暇計画を管理するプログラムです。」

あなたの会社では、マネージャーは計画された休暇を取りますか?確かに彼らはそうします。そして、同様に、あなたはそれを管理するための別のアプリケーションを構築するつもりはありません。だからあなたが本当に必要なのはこれです:

User -> Requester
     -> Approver

各ユーザーは、1つの承認チェーンの要求者になります。 (CEOの特別な手配が必要になる場合があります)。さらに、一部のユーザーは1つ以上のチェーンの承認者になります。最終的な承認者は、おそらくリクエスターの成績によって異なります。CEOは、清掃スタッフの休暇の手配を承認することに気にしたくないでしょう。

特定の要求者の休日の承認者になることができる人を強制するために、いくつかのルールが必要です。非常にフラットな組織がない限り、労働者とマネージャーの階層があることがわかります。たとえば、チームリーダーまたはフォアマン - 「マネージャー」ではなく「労働者」が他の点である個人は、チェーンにいる可能性があります。また、組織の他の側面を考慮する必要がある場合があります。 FRインスタンス、従業員がHR部門からの承認が必要になる可能性のある翌年に休暇を運ぶことを希望する場合、通常は従業員に対して管理上の責任がない人。

編集2

さて、現実的なシナリオではなく、任意のルールセットをモデル化しています。

どれどれ。各ユーザーは、これらのタスクで定義された単一のカテゴリに適合します。

  • 従業員は休暇を要求できます
  • マネージャーは、休暇リクエストを承認または拒否できます
  • トップマネージャーは承認または拒否を受け入れるか覆すことができます

マネージャーとトップマネージャーには、共通の行動はありません。その結果、最初のモデルは正しいモデルです。

私はこれらを俳優としてモデル化します。それらはシステムのドメインではなく、システムのユーザーです。 「お菓子を望んでいる学校のキッド」、「タバコを望んでいる学校の親」、「書記官」などで店の在庫システムをモデル化しますか?ストアマネージャー(俳優)のみが領収書なしで払い戻しを行うことはできますが、システムレベルで重要なのは、システムがストアマネージャーのキーを認識していることであり、俳優が実行する役割ではなくソフトウェアにある許可トークンです。

あなたが説明するシステムのドメインは、休暇要求とユーザーアカウントであり、一部のユースケースは、一部のアカウントが休暇要求まで特定の州の変革を実行する許可を持っていることを意味します。

ユーザー/マネージャー/従業員の俳優と役割をモデリングすることの違いは、アクターの階層を持たない必要がないため、システムに入れる必要があるもののモデル化に集中できることです。ユースケースとシステムで抽象化を使用し始めます俳優ではなく、エンティティレベル。少なくとも「なぜこの区別をコーディングするのか」と尋ねる限り、「これがコードでどのように機能するか」と考えるのは必ずしも悪い考えではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top