Как моделировать "целевой день" в UML Classdiagrams

Я хочу описать следующую ситуацию в UML Classdiagram:

День, когда газета отправляется клиенту. Этот день мог бы быть. например "каждую пятницу" или "каждый первый день месяца".

Моя идея представить это в UML Classdiagram:

-targetDay:Integer
-targetDayGrid:Enumeration

targetDay будет sth. например, "1" (в понедельник) или "5" (в пятницу), или оно может быть "1" в течение первого дня месяца или "10" в течение 10-го числа месяца.

targetDayGrid - это перечисление: еженедельно, ежемесячно.

Таким образом, перечисление устанавливает семантическое значение числа в targetDay. Я не доволен этим, знаете ли вы какое-либо другое решение для представления моей проблемы? Или вы думаете, что мое решение в порядке?

3 ответа

На самом деле кажется хорошей идеей отделить фактическое извлечение даты и вычисление этой даты друг от друга, но это не может быть выполнено в каждой ситуации, например. когда вы хотите предварительно вычислить больше значений, и вы можете более эффективно вычислить метод методом вычислений, чем клиент по клиенту. Это также позволит в будущем добавлять новые методы (двухнедельная доставка, другая схема доставки во время отпуска...). Было бы опасно иметь значение с семантикой, зависящее от другого значения. Вы также хотите избежать ошибочных данных, возможно, используя перечисления, как было предложено, особенно в течение нескольких дней в неделю (не забывайте, что не каждый месяц имеет одинаковую длину, вам понадобится некоторый класс Date с проверкой, а не только перечислением). Однако, если вы ищете простейшее решение, попробуйте две переменные - день в году и множитель за день (но не забывайте, что не каждый год имеет такое же количество дней...).


Это может показаться чересчур избыточным, но я думаю, что вам нужны еще три класса: TargetDay, который будет абстрактным классом (или интерфейсом), WeeklyTargetDay и MonthlyTargetDate, который обеспечит различные реализации TargetDay alt text http://www.freeimagehosting.net/uploads/a5c029bedd.png


По-моему, я бы разделил два и смоделировал класс с двумя перечислениями, такими как

public enum Day_Of_Week{ SUN, MON, TUE, WED, THU, FRI, SAT }
public enum Day_Of_Month{ 1, 2, .. , 31 }

Это позволяет избежать какой-либо неправильной установки значения > 7 в targetDay для "Дня недели"

licensed under cc by-sa 3.0 with attribution.