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

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

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

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

Вот как я это делаю в UML:

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

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

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

Вот как я это делаю в 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() операция. Пользователь вашего объекта не может отслеживать постоянное состояние вашего объекта. Это позволит избежать проблем, таких как добавление уже существующего объекта или обновление несуществующего объекта.

Другие вопросы по тегам