Я пытаюсь внедрить систему живых уведомлений (например, fb, xing, twitter..). Поэтому перед созданием сущностей я создал диаграмму классов UML. Витрина такова:
EDIT: Я думал об этом подходе, и кажется, что это неверно. Позвольте проверить следующий сценарий: Пользователь U добавляет в изображение E E Я комментарий C. Как сохранить это правильно, я имею в виду, что EventNotification имеет только ссылку на событие E, но не на я и C. Поэтому мне нужно будет создать "EventImageNotification", и это будет беспорядок. Было бы более приятным решением просто иметь один класс "Уведомление" и добавить в него поле "метаданные", в котором хранятся ссылки на все связанные поля?
(Я использую OR-Mapper для реализации отношений позже).
[1] Один пользователь может создавать события, например. "Silvester Party 2015". (Один ко многим). Это событие имеет панель мониторинга, на которой пользователи могут подписаться на получение обновлений, когда создатель сообщает что-то в этом событии (ManyToMany).
[2] Когда пользователь публикует что-то на панели мониторинга события, подписчики должны получать уведомление. Поэтому я создал класс EventNotification. Связь между пользователем и EventNotification - это ManyToMany.
[3] Чтобы сохранить его в чистоте, я создал класс AbstractNotification, относящийся к типу Notification. Тип уведомления - это что-то вроде name = "EventPost" и template = "Пользователь пользователь разместил что-то новое на событии __event".
[4] Абстрактный класс NotificationConnector предоставляет поля классу сопоставления между EventNotification и User (UserEventNotification). Я создал их, чтобы облегчить его в будущем, например. Пользователь может создавать книги, которые также запускают события и т.д. Затем мне нужно создать один класс "BookNotification" и один класс "UserBookNotification" для хранения уведомлений для этого нового объекта.
Является ли этот подход хорошим или полностью испорченным? Расскажите, пожалуйста, ваши идеи об этой диаграмме:
(Стрелки для создания ассоциаций должны были быть нормальными строками, инструмент, который я использовал, просто не мог этого сделать).
Всего несколько наблюдений:
has
из User
должно перейти к UserEndNotification
, а не к абстрактному классу (который я рекомендую вообще отказаться).NotificationType
a <<enumeration>>
owns
я бы использовал класс ассоциации между User
и Event
и добавил свойство isOwner
и isSubscriber
.