2

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

employee
manager
top mananger

、をUserどこから定義することにしました。さて、どのような専門階層から選ぶべきかわかりません。次の方法のどちらかを決めることはできません。EmployeeManagerTop Manager

代替テキスト

また

代替テキスト

どちらが望ましいのか、そしてその理由は?

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

ありがとう

編集:

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

4

3 に答える 3

2

実生活では、マネージャーは従業員でもあります。したがって、これは確かに専門性の向上の連鎖にすぎません。

User -> Employee -> Manager -> Top Manager 

編集

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

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

User -> Requester
     -> Approver

各ユーザーは、1つの承認チェーンのリクエスターになります。(CEOのために特別な手配が必要になる場合があります)。さらに、一部のユーザーは1つ以上のチェーンの承認者になります。最終的な承認者は、おそらく依頼者のグレードによって異なります。CEOは、用務員の休暇の手配を承認することに煩わされることはありません。

特定のリクエスターの休日の承認者になることができる人を強制するためのいくつかのルールが必要になります。あなたが非常にフラットな組織を持っていない限り、あなたはあなたが労働者とマネージャーの階層を持っていることに気付くでしょう。たとえば、チームリーダーまたはフォアマン(他の点では「マネージャー」ではなく「ワーカー」である個人)がチェーンに含まれている場合があります。また、組織の他の側面を考慮する必要があるかもしれません。たとえば、従業員が人事部の承認を必要とする可能性のある翌年に休暇を持ち越したい場合、通常は従業員の管理責任を一切負わない人がいます。

編集2

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

どれどれ。各ユーザーは、次のタスクによって定義される単一のカテゴリに分類されます。

  • 従業員は休暇をリクエストできます
  • マネージャーは休暇申請を承認または拒否できます
  • トップマネージャーは、承認または却下を承認または覆すことができます

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

于 2010-05-31T03:45:51.410 に答える
2

これは主に、用語をどのように定義するかという問題に帰着します。基本的な質問は、考えられるあらゆる状況でマネージャーが従業員の代わりになることができるかどうかです。モデル化されている職場の正確なルールを知らなければ、それについてどちらか一方を言うことは不可能です。

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

一方で、組合主導のルールがたくさんある場所では、まったくそうではないかもしれません。たとえ人が完全に仕事をする能力があるとしても、規則は彼がその立場で代用することを全く妨げるかもしれません。場合によっては、これは認証要件など(たとえば、マネージャーが仕事をする資格を持っていても、必要な認証が失効している)や、組合の規則など(たとえば、かつて叱責された私の友人)から発生します。彼は、懐中電灯の電球とバッテリーを会社の店から彼の研究室に持ち帰りました。

于 2010-05-31T04:03:47.670 に答える
1

これらをアクターとしてモデル化します。それらはシステムのドメインではなく、システムのユーザーです。「お菓子が欲しい学童」、「タバコが欲しい学童の親」、「店員」などで店の在庫システムをモデル化しますか?領収書なしで払い戻しを行うことができるのは店長(アクター)だけですが、システムレベルで重要なのは、システムが店長のキーを認識し、アクターが果たす役割ではなく、ソフトウェアにある許可トークンです。

説明するシステムのドメインは休暇申請とユーザーアカウントであり、一部のユースケースは、一部のアカウントが休暇申請への特定の状態変換を実行する権限を持っていることを意味します。

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

于 2010-05-31T08:18:41.900 に答える