На диаграмме классов UML, где показывать методы DAO доменного класса
Я пытаюсь построить диаграмму классов UML. Я немного новичок в UML, так что извините за мое невежество.
У меня есть класс домена User
с этими атрибутами:
- Имя пользователя; тип данных - строка; идентификатор
- Пароль; тип данных - строка
- Активный; тип данных bool
- Заблокирован; тип данных bool
- PasswordExpiryDate; тип данных DateTime
Вот как я это делаю в UML:
Теперь я хочу определить эти операции этого User
класс в диаграмме классов UML:
- Получить объект User по предоставленному идентификатору из базы данных.
- Сопоставьте пароль полученного объекта User с предоставленным паролем.
- Проверьте, является ли полученный пользователь активным.
- Проверьте, заблокирован ли полученный пользователь.
- Проверьте, не истек ли срок действия полученного пароля пользователя.
- Вставьте объект пользователя в базу данных.
- Обновите объект User в базе данных.
- Удалить объект пользователя из базы данных.
Вот как я это делаю в UML:
Но я очень растерялся из-за метода № 1 "Извлечение объекта User по предоставленному идентификатору из базы данных".
Все остальные методы работают на одном User
объект, который означает, что один User
объект уже был получен из базы данных или его новый объект.
Но метод № 1 имеет смысл работать над коллекцией User
объекты, что означает все пользовательские объекты, которые уже существуют в базе данных.
Имеет ли это смысл? или это несоответствие? Если да, как я могу это исправить?
Спасибо
ОБНОВИТЬ
Спасибо за упоминание операций на уровне класса в диаграмме классов UML. Я не знал о них.
Итак, я внес изменения, и это последняя диаграмма классов UML для User
учебный класс:
Теперь это правильно?
2 ответа
Обратите внимание, что это не только ваш метод № 1, но и ваш AddUser
метод "работать с коллекцией объектов User, что означает все объекты пользователя, которые уже существуют в базе данных". Фактически все методы CRUD отличаются друг от друга, так как они работают с соответствующей совокупностью таблиц базы данных.
Используя подход DAO, вы определяете свои методы доступа к данным CRUD. retrieveUser
а также deleteUser
в форме методов уровня класса ("статических"), поскольку они не работают с объектом контекста (как отметил Герт Беллекенс), а скорее принимают идентификатор объекта (в вашем случае UserName
) как их единственный параметр. Два других метода CRUD, createUser
а также updateUser
также, как правило, не будет работать с объектом контекста (в вашем случае User
объект), а скорее имеют параметры для значений данных, вводимых через пользовательский интерфейс. В случае createUser
(ваш AddUser
), User
Объект будет создан, только если значения данных удовлетворяют всем ограничениям, определенным в классе модели. User
, В случае updateUser
обновление будет выполняться только тогда, когда измененные значения не нарушают никаких ограничений.
Я думаю, что я бы смоделировал это как статическую или классовую операцию. Вам не нужен User
экземпляр для этого типа операции.
Нотация UML для статического метода должна быть подчеркнута.
ОТ я бы тоже совмещал Add()
а также Update()
в один Save()
операция. Пользователь вашего объекта не может отслеживать постоянное состояние вашего объекта. Это позволит избежать проблем, таких как добавление уже существующего объекта или обновление несуществующего объекта.