如何在UML类图中建模“目标日期”

3

我希望在UML类图中描述以下情况:

有一天,将报纸发送给客户。这一天可以是“每个星期五”或“每个月的第一天”之类的东西。

我在UML类图中表示这个想法:

-targetDay:Integer
-targetDayGrid:Enumeration

targetDay会是类似于“1”(表示星期一)或“5”(表示星期五)这样的数字,它也可能是“1”(表示当月的第一天)或“10”(表示当月的第十天)。

targetDayGrid是一个枚举类型:weekly(每周)和monthly(每月)。

因此,枚举类型设置了targetDay中数字的语义意义。我对此不太满意,您是否知道其他解决方案来表示我的问题?或者您认为我的解决方案还可以吗?


你不会遇到“每月第一个星期五”这样的情况吗? - JoseK
现在不行,但也许以后可以。 - Tobias
3个回答

1
在我看来,我会将这两个分开,并使用2个枚举来建模类,如下:
public enum Day_Of_Week{ SUN, MON, TUE, WED, THU, FRI, SAT }

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

这样可以避免将“星期几”的目标日期设置为大于7的错误值。


我正在考虑一个规则引擎...也许有更好的想法。 - Tobias

1

将实际日期检索和日期计算分开似乎是一个好主意,但并非在所有情况下都适用,例如当您想要预先计算更多值并且可以通过逐个计算方法而不是逐个客户更有效地进行计算时。这也将允许将来添加新方法(每两周交付,在假期期间使用不同的交付模式...)。具有语义依赖于其他值的值可能是危险的。您还希望避免错误数据,可以考虑使用枚举类型,特别是对于一周中的天数(不要忘记,并非每个月的长度相同,您需要一些带有检查的日期类而不仅仅是枚举类型)。但是,如果您正在寻找最简单的解决方案,请尝试使用两个变量-一年中的天数和一天的乘数(但不要忘记,并非每年的天数相同...)。


1

我正在考虑一个规则引擎...也许有更好的想法。 - Tobias
你需要一些属性来定义重复性,这些属性将取决于重复性的性质。通常可以使用多态性(子类化/接口实现)来解决这个问题。 - Maurice Perry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接