3


2

UMLクラス図で「目標日」をモデル化する方法

UMLクラス図で次の状況を説明します。

新聞が顧客に送られる日。 この日は気の遠くなるかもしれません。 「毎週金曜日」や「毎月1日」などです。

これをUML Classdiagramで表すというアイデア:

-targetDay:Integer
-targetDayGrid:Enumeration

targetDayはsthです。 「1」(月曜日)または「5」(金曜日)など、または月の最初の日は「1」、月の10日目は「10」などです。

targetDayGridは、enumです:毎週、毎月。

そのため、enumはtargetDayの数値の意味を設定します。 私はこれに満足していません、私の問題を表す他の解決策を知っていますか? または、私の解決策は大丈夫だと思いますか?

3 回答


1


私の意見では、2つを分離し、クラスを次のような2つの列挙型でモデル化します

public enum Day_Of_Week{ SUN, MON, TUE, WED, THU, FRI, SAT }

public enum Day_Of_Month{ 1, 2, .. , 31 }

これにより、「曜日」のtargetDayに対する値> 7の誤った設定が回避されます。


1


これは少しやり過ぎかもしれませんが、ここにはさらに3つのクラスが必要だと思います。抽象クラス(またはインターフェイス)であるTargetDay、TargetDayの異なる実装を提供するWeeklyTargetDayおよびMonthlyTargetDate http://www.freeimagehosting.net/ uploads / a5c029bedd.png [alt text http://www.freeimagehosting.net/uploads/a5c029bedd.png]


1


実際の日付の取得とその日付の計算を互いに分離することは本当に良い考えのように見えますが、これはすべての状況、例えば、 より多くの値を事前計算したい場合、顧客ごとに計算するよりも計算方法ごとに計算する方が効率的です。 これにより、将来的に新しいメソッドを追加することもできます(隔週の配信、休日中の異なる配信スキーマなど)。 他の値に依存するセマンティクスを持つ値を持つことは危険です。 また、特に週の日については、おそらく提案されている列挙型を使用して、誤ったデータを避けたいです(毎月が同じ長さではないことを忘れないでください、単なる列挙ではなくチェック付きのDateクラスが必要です)。 ただし、最も簡単なソリューションを探している場合は、2つの変数を試してください-1年の日と1日の乗数(ただし、毎年同じ日数ではないことを忘れないでください…​)。