Схема классов UML для входа пользователя

Диаграмма ниже - это моя первая попытка создать диаграмму классов UML, описывающую вход пользователя на веб-сайт.

rubbishlogindesign

Я уверен, что это плохой дизайн и полон недостатков, но я надеюсь узнать от вас, ребята, как вы бы разработали такой простой логин. Меня особенно интересует использование вами шаблонов проектирования и то, какие шаблоны вы бы использовали, как бы вы реализовали это в дизайне и почему.

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


person Anthony    schedule 14.03.2010    source источник
comment
Оппс, я должен был позволить Web_master унаследовать от модератора, чтобы мне не пришлось переписывать функцию delete_reg_member   -  person Anthony    schedule 15.03.2010


Ответы (4)


Вот как мы реализуем эту функцию


Схема классов


Как видите, у нас много приложений (здесь они ведут себя как ваш сайт).

Модератор, веб-мастер и член, как показано в вашем сопоставлении, было бы лучше в качестве роли. Что произойдет, если вам нужно добавить новую «Роль». Может вам придется поменять всю вашу модель.

Каждое UserApplication (UserWebsite) имеет дату начала и окончания. И у каждого приложения своя роль. Веб-сайту банка нужна роль менеджера. Веб-сайту медицинской страховой компании нужна роль агента и так далее ...

ОБНОВЛЕНИЕ

Я понимаю взаимоотношения между логином и пользователем (частично / полностью). Прежде чем продолжить, просмотрите этот ответ о композиции по сравнению с агрегированием.

Но чего я не понимаю, так это назначения классов UserApplication и Application.

Думайте о приложении как о своем веб-сайте. Я работаю в большой компании по страхованию здоровья, где у нас много модулей (каждый модуль (приложение) имеет свой веб-сайт). Но некоторые Пользователи, а не все, могут использовать каждый модуль. Это объясняет, почему я определяю UserApplication.

роль роли в этом процессе входа в систему

Никто. Это просто дает UserApplication роль. Я могу использовать финансовый модуль, который определяет следующие роли: менеджер, клиент и другие, где я могу играть роль менеджера. Но я могу назначить вам временного пользователя (startDate и endDate) в качестве клиента для использования финансового модуля.

Application financialModule = new Application();

financialModule.addRole(new Role("Manager"));
financialModule.addRole(new Role("Customer"));
financialModule.addRole(new Role("Other"));

User arthur = new User(new Login("#####", "#####"));
arthur.setFirstName("Arthur");
arthur.setLastName("Ronald");
arthur.setEnabled(true);

UserApplication financialModuleUser = new UserApplication(new Period(new Date(), null));
financialModuleUser.setUser(arthur);
financialModuleUser.addRole(financialModule.getRoleByDescription("Manager"));

financialModule.addUserApplication(financialModuleUser);

Ваш сайт выглядит как

Website myWebsite = new Website();
myWebsite.addRole(new Role("Member"));
myWebsite.addRole(new Role("WebMaster"));
myWebsite.addRole(new Role("Moderator"));

User you = new User(new Login("#####", "#####"));
you.setFirstName("FirstName");
you.setLastName("LastName");
you.setEnabled(true);

UserApplication myWebsiteUser = new UserApplication(new Period(new Date(), null));
myWebsiteUser.setUser(you);
myWebsiteUser.addRole(myWebsite.getRoleByDescription("WebMaster"));

myWebsite.addUserApplication(myWebsiteUser);

Как видите, веб-мастер, модератор и участник - это просто роли, определенные вашим веб-сайтом. Ничего больше.

Хорошим ресурсом по UML и ORM является книга «Java Persistence with Hibernate».

person Arthur Ronald    schedule 18.03.2010
comment
+1, спасибо, Артур, за то, что нашел время показать мне, как вы на самом деле реализуете логин, я очень ценю это. Это очень полезно. Хорошо, поэтому я понимаю взаимосвязь между логином и пользователем (частично / полностью). Но чего я не понимаю, так это назначения классов UserApplication и Application. Я вижу, что каждый пользователь использует UserApplication, и одно приложение может, я полагаю, сгенерировать 1 или несколько UserApplication, но не могли бы вы дать мне пример того, чем может быть UserApplication. Кроме того, роль роли в этом процессе входа в систему. Я не совсем уверен, какую роль этот класс играет по отношению к пользователю. - person Anthony; 19.03.2010
comment
@Arthur, можете ли вы порекомендовать форумы, посвященные разработке кода с использованием UML? - person Anthony; 19.03.2010
comment
@ Артур Гарсия, еще раз спасибо за то, что нашли время мне это объяснить. Код Java действительно помог. - person Anthony; 22.03.2010
comment
@Arthur, я случайно поставил +1 для вас, в результате чего мой предыдущий голос был удален, и я не смог вернуть его, потому что сообщение слишком старое. Я думаю, вы заслуживаете +1, но это ограничение - отстой - person Anthony; 22.03.2010
comment
@Arthur, добро пожаловать, но извините за случайное удаление +1, теперь я не могу вернуть его. Еще раз спасибо. - person Anthony; 23.03.2010
comment
вау, я действительно хочу поблагодарить за этот отличный ответ. Я должен реализовать ту же функцию в своем проекте в этом семестре :) - person Dzung Nguyen; 10.12.2010
comment
Диаграмма классов больше не отображается. Не знаю, как привлечь внимание админов! - person Srik; 25.06.2014
comment
@ArthurRonald, не могли бы вы снова загрузить изображение? Пожалуйста, я бы хотел увидеть этот дизайн :) - person Яois; 10.07.2014
comment
Я закончил, потому что рефакторинг нашего процесса входа в систему, однако - не уверен, отсутствует ли здесь какая-либо картинка, но - где же методы ваших классов? - person Ivan; 21.07.2016
comment
@ArthurRonald В чем преимущество отделения класса входа от класса пользователя? - person Maihan Nijat; 16.08.2017

я изучил описание вашего варианта использования., это неверно, это может быть:

Use Case: Login The System
Scope: Your Project Name.
Primary Actor: User
StakeHolders and Interests:
User: want to sign-in the system without any mistake or error.
Preconditions: User should be the system user
Success Guarantee: User entered the system
Main Success Scenario:
1.  User enters login page.
2.  System builds login page. Fields such as username and password  are observed on the screen.
3.  Users enters required informations.
4.  Users sends information with a view to entering the system.
5.  System approves information, open the session of user and returns message ”Login process is successfull”.
Alternate flows:
      3a.User does not enter all required field.
              1.System wait that user enter so-called required field.
       4a.The information of user such as username or password is wrong
              1.System send message ”Your send wrong user parameters.”

После того, как вы напишете свой вариант использования, вы рисуете свой SSD следующим образом.

альтернативный текст

и диаграмма взаимодействия вышеупомянутого SSD, как это. Я предполагал, что вы используете ORM (например, Hibernate, LinqToSql, EntityFramework ... поэтому вам не нужен шаблон фасада при доступе к вашим данным.)  alt text

и чувак, вы не выбираете других пользователей из одного варианта использования. Итак, Ларман говорит, что групповой вариант использования ur, и выбрал одну группу для реализации. Эта группа вариантов использования отражает ваш класс в версии 1., поэтому для одного варианта использования вы не можете получить несколько классов. Просто прочтите книгу Лармана и посмотрите эту презентацию http://faculty.inverhills.edu/dlevitt/CIS%202000%20Home%20Page.htm

если возложить ответственность на классы, реализация будет такой простой. может быть, вы не любите читать, но иногда нам стоит прочитать несколько книг. Книга Лармана - одна из любимых книг инженеров программного обеспечения. Многие университеты используют эту книгу для своего объектно-ориентированного анализа и проектирования.

person ibrahimyilmaz    schedule 20.03.2010
comment
@egebilmuh, большое спасибо. Я очень ценю вашу откровенность, и вы были точны. Вы научили меня альтернативному способу, которым я буду читать дальше. Еще раз спасибо - person Anthony; 22.03.2010

Я посоветовал вам использовать шаблон Grasp Design для создания хорошего дизайна. Согласно этой дисциплине, в первую очередь вы должны подумать, кто несет ответственность за выполнение этой операции. Какой класс отвечает за это и какой метод. Подводя итог, вы также увидите, что корнем шаблона Gof является Grasp. в вашем дизайне, извините, я с сожалением вынужден сказать, что ваш вариант использования не определен должным образом, и эта диаграмма классов должна быть вашей моделью предметной области, поскольку она отражает концепции вашего варианта использования. Я против создания диаграммы классов до создания диаграммы последовательности и взаимодействия системы для так называемого варианта использования. в вашей модели домена Обычный член, веб-мастер и модератор является пользователем, и мы можем сказать, что он использует учетную запись пользователя. кстати, не делайте наследование до тех пор, пока вы этого не сделаете, потому что это увеличивает сцепление вашего класса, поэтому вы не можете быстро провести рефакторинг. http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design)

альтернативный текст

https://rads.stackoverflow.com/amzn/click/com/0130925691

person ibrahimyilmaz    schedule 18.03.2010
comment
+1, спасибо, что рекомендуете эту книгу и книгу GOF. Вы не должны извиняться, я знаю, что мой дизайн ошибочен, лол. Ваше право, я основал свою диаграмму классов исключительно на диаграмме вариантов USE. Спасибо, что предложил моим трем пользователям быть пользователями, и о проблемах связывания, мне нужно это изучить. Спасибо. - person Anthony; 19.03.2010
comment
@egebilmuh, можете ли вы порекомендовать форумы, посвященные разработке кода с использованием UML? - person Anthony; 19.03.2010

Я вижу 2 места, которые я бы изменил:

1) База данных не является классом и не должна отображаться на диаграмме классов. Вероятно, это актуально для User_account (насколько я понимаю, это таблица внутри БД)

2) Когда 3 класса наследуются от 1 суперкласса (WebMaster, Moderator, RegularMember от пользователя), это также показано, как я нарисовал ниже:

                 1     uses>   1..*
          User <>--------------->UserAccount
           /|\
            |
            |
     _______|________
     |      |       |
     |      |       |
   Mod     WebM   RegularM
person Roman    schedule 14.03.2010
comment
Спасибо за ответ Роман. Да, я знал, что мне не следовало называть тот класс, который обращается к базе данных Database. Я должен был быть яснее с этим. Итак, как бы вы подтвердили учетные данные пользователя? Я собирался сохранить эти учетные данные в базе данных и просто попросить класс обмениваться данными с базой данных и проверять логин с тем, что хранится в базе данных. - person Anthony; 15.03.2010
comment
@Roman, да, я вижу это сейчас, User (возможно, абстрактный класс) имеет отношение агрегирования с UserAccount, а суперклассы (Mod, WebM и RegularM) наследуют это отношение от User. - person Anthony; 15.03.2010