На диаграмме классов UML, где показать методы DAO класса предметной области

Я пытаюсь построить диаграмму классов UML. Я немного новичок в UML, так что прошу прощения за мое невежество.

У меня есть класс домена User со следующими атрибутами:

  • Имя пользователя ; тип данных — строка; идентификатор
  • Пароль ; тип данных — строка
  • Активный ; тип данных логический
  • Заблокировано; тип данных логический
  • Дата истечения срока действия пароля ; тип данных DateTime

Вот как я строю это в UML:

введите здесь описание изображения

Теперь я хочу определить эти операции этого класса User на диаграмме классов UML:

  1. Получить объект User по предоставленному идентификатору из базы данных.
  2. Сопоставьте пароль полученного объекта User с предоставленным паролем.
  3. Проверьте, активен ли полученный пользователь.
  4. Проверьте, заблокирован ли полученный пользователь.
  5. Проверьте, не истек ли срок действия полученного пароля пользователя.
  6. Вставьте объект пользователя в базу данных.
  7. Обновите объект пользователя в базе данных.
  8. Удалить объект пользователя из базы данных.

Вот как я строю это в UML:

введите здесь описание изображения

Но меня очень смущает метод № 1 «Получить объект пользователя по предоставленному идентификатору из базы данных».
Все остальные методы работают с одним объектом User, что означает, что один объект User уже был извлечен из базы данных или это новый объект.
Но метод №1 имеет смысл работать с коллекцией из User объектов, что означает все пользовательские объекты, которые уже существуют в базе данных.

Имеет ли это смысл? или это несоответствие? Если да, то как я могу это исправить?

Спасибо


ОБНОВИТЬ

Спасибо за упоминание операций на уровне классов в диаграмме классов UML. Я не знал о них.

Итак, я внес изменения, и это последняя диаграмма классов UML для класса User:

введите здесь описание изображения

Теперь правильно?


person ChumboChappati    schedule 04.04.2018    source источник
comment
Я немного уточнил свой ответ. Обратите внимание, что вы должны обозначить атрибут UserName как атрибут идентификатора, добавив {id} после string. Тогда также DeleteUser должен иметь только параметр userName. В своем ответе я объясняю, что также создание/добавление и обновление не будут иметь объект User в качестве параметра.   -  person Gerd Wagner    schedule 13.04.2018


Ответы (2)


Обратите внимание, что это не только ваш метод № 1, но и ваш метод AddUser для «работы с коллекцией объектов пользователя, что означает все объекты пользователя, которые уже существуют в базе данных». На самом деле все методы CRUD различны, поскольку они работают с соответствующим заполнением таблиц базы данных.

С подходом DAO вы должны определить свои методы доступа к данным CRUD retrieveUser и deleteUser в форме методов уровня класса («статические»), поскольку они не работают с объектом контекста (как заметил Герт Беллекенс), а скорее принимают идентификатор объекта (в вашем случае UserName) в качестве их единственного параметра. Два других метода CRUD, createUser и updateUser, также обычно не работают с объектом контекста (в вашем случае с объектом User), а скорее имеют параметры для значений данных, введенных через пользовательский интерфейс. В случае createUser (ваш AddUser) объект User будет создан только в том случае, если значения данных удовлетворяют всем ограничениям, определенным в классе модели User. В случае updateUser обновление будет выполняться только тогда, когда измененные значения не нарушают никаких ограничений.

person Gerd Wagner    schedule 04.04.2018
comment
Я обновил сообщение с операциями на уровне класса. Теперь нормально? - person ChumboChappati; 04.04.2018

Думаю, я бы смоделировал это как операцию static или Class. Вам не нужен экземпляр User для этого типа операций.

В нотации UML для статического метода он должен быть подчеркнут.


О.Т. Я бы также объединил Add() и Update() в одну операцию Save(). Пользователь вашего объекта не должен отслеживать постоянное состояние вашего объекта. Это позволит избежать таких проблем, как добавление уже существующего объекта или обновление несуществующего объекта.

person Geert Bellekens    schedule 04.04.2018
comment
Я использую специальный класс Singleton для обработки такого статического доступа. - person qwerty_so; 04.04.2018
comment
Я обновил сообщение с операциями на уровне класса. Теперь нормально? - person ChumboChappati; 04.04.2018