У меня есть проблема с дизайном, на которую я хотел бы получить некоторый ввод. Вот ограничения:Дизайн активации электронной почты учетной записи (с учетом Hibernate)
- Каждый пользователь должен иметь рабочий адрес электронной почты при регистрации своей учетной записи. При регистрации учетной записи пользователя необходимо отправить электронное письмо с активацией, содержащее ссылку с кодом активации, которая должна быть выполнена для активируемой учетной записи.
- Каждая учетная запись пользователя существует ровно в одном офисе, который существует ровно в одной компании.
- Первый зарегистрированный пользователь из компании создает компанию и один офис. Затем остальных пользователей компании приглашает первый пользователь.
- Компании могут взаимодействовать друг с другом, но только если активируются первые пользователи компаний (т. Е. После регистрации они нажали соответствующие ссылки активации).
Вот небольшой UML-диаграмма, как она может быть решена:
alt text http://i43.tinypic.com/2dj5bhh.png
В приведенной выше диаграмме некоторые детали опущены. На диаграмме показаны только классы и поля. Когда дело доходит до полей, они просто используются концептуально, чтобы показать, какая информация должна храниться, пожалуйста, игнорируйте их область действия.
Некоторые мысли и вопросы:
- пользователя и NotActivatedUser в основном совпадают. Должны ли они быть одним классом или разделены? Если они разделены, какая форма сохранения наследования Hibernate вы бы использовали?
- Если учетная запись не активирована через определенное время, ее необходимо удалить. Если это был первый пользователь, который также создал пользователей Компании и Office, оба из них также должны быть удалены. Нужны ли нам NotActivatedOffice и NotActivatedCompany? (Для чистого разделения в базе данных.)
Как бы вы разработали этот вид решения? Считаете ли вы, что важно сохранить неактивные и активные объекты отдельно в базе данных? Почему или почему нет?
Флаг владельца офиса кажется ненужным; это должен быть действительно простой запрос для поиска офисов, созданных данным пользователем. –
Только если у вас есть обратная ссылка от офиса к пользователю. Это будет другой вариант. –