Метод класса вписывается в класс который осуществляет действие или в класс над которым осуществляют действие?

644a7c8f26936362755047.png

Есть сущности: участник, модератор, книга, опрос
Модератор создает/редактирует/удаляет опросы, добавляет книги
Участник голосует в опросах
Модератор и участник могут просматривать страницы книг и осуществлять поиск по книгам

Метод класса вписывается в класс который осуществляет действие или в класс над которым осуществляют действие? Правильно ли написаны методы в классах? или методы VotePoll, Create, Update, Delete должны быть в сущности Poll?
  • Вопрос задан
  • 243 просмотра
Решения вопроса 1
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Уфф, 5 раз прочитал, пока понял. Второе.

Метод класса вписывается в класс который над которым осуществляют действие.
Собственно, определение класса - это "данные и методы для работы с ними". С ними. А не с данными чужих объектов.

Сущность Модератор в данном случае вообще не нужна, достаточно свойства в сущности Пользователь (кстати, откуда вы все берете этих "участников"? Участник бывает у события, а не у сущности. Вы же не говорите "участник 5А класса?")

Связей здесь должно быть значительно меньше.
Если модератор не упоминается ни в опросе, ни в добавленной книге, то и связи между ними никакой нет.
В текущей схеме должна быть только одна связь: опроса с прошедшим его пользователем. Одним из свойств опроса будет экземпляр класса Пользователь. Причем это касается класса РезультатОпроса, которого нет на диаграмме. А он должен быть. И вот он будет связан с классом Опрос.

Чего здесь не хватает - это интерфейса. Классов-контроллеров. Которые собственно эти методы и вызывают.
Какой-нибудь BookController.add(), который принимает, скажем, два объекта, Пользователь и Инпут, и проверяет, является ли пользователь модератором. И если да, то создает объект Book, и используя данные из инпута, вызывает Book.add()
И то же самое с опросами

Еще по-хорошему должен быть BookRepository. Потому что если книга умеет сама себя добавлять в хранилище, то это считается плохим тоном. Должен быть отдельный объект Хранилище Книг, в котором и будут методы добавления и поиска.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Griboks
@Griboks
Если кратко: класс управляет только своим состоянием.

У вас ошибка в схеме. Например books - это библиотека, но её поля почему-то относятся к конкретной книге, а не всем хранимым экземплярам класса Book,;причём методы относятся ко всем книгам сразу, а не к конкретной книге...

Иными словами, вы пропустили базы данных в вашей иерархии. Так, должен быть класс Library, который отвечает за работу с книгами и за права доступа к книгам. Тогда у отдельных книг должно быть поле-ссылка на библиотеку, следовательно, библиотека должна "внедрять зависимости" в книги (чтобы зависимости стали частью состояния класса).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы