@movingpixels

Есть сущности: участник, модератор, книга, опрос
Модератор создает/редактирует/удаляет опросы, добавляет книги
Участник голосует в опросах
Модератор и участник могут просматривать страницы книг и осуществлять поиск по книгам
Метод класса вписывается в класс который осуществляет действие или в класс над которым осуществляют действие? Правильно ли написаны методы в классах? или методы VotePoll, Create, Update, Delete должны быть в сущности Poll?
Решения вопроса 1
@Fockker
Метод класса вписывается в класс который над которым осуществляют действие.
Собственно, определение класса — это «данные и методы для работы с ними». С ними. А не с данными чужих объектов.
Сущность Модератор в данном случае вообще не нужна, достаточно свойства в сущности Пользователь (кстати, откуда вы все берете этих «участников»? Участник бывает у события, а не у сущности. Вы же не говорите «участник 5А класса?»)
Связей здесь должно быть значительно меньше.
Если модератор не упоминается ни в опросе, ни в добавленной книге, то и связи между ними никакой нет.
В текущей схеме должна быть только одна связь: опроса с прошедшим его пользователем. Одним из свойств опроса будет экземпляр класса Пользователь. Причем это касается класса РезультатОпроса, которого нет на диаграмме. А он должен быть. И вот он будет связан с классом Опрос.
Чего здесь не хватает — это интерфейса. Классов-контроллеров. Которые собственно эти методы и вызывают.
Какой-нибудь BookController.add(), который принимает, скажем, два объекта, Пользователь и Инпут, и проверяет, является ли пользователь модератором. И если да, то создает объект Book, и используя данные из инпута, вызывает Book.add()
И то же самое с опросами
Еще по-хорошему должен быть BookRepository. Потому что если книга умеет сама себя добавлять в хранилище, то это считается плохим тоном. Должен быть отдельный объект Хранилище Книг, в котором и будут методы добавления и поиска.
Ответы на вопрос 1
@Griboks
У вас ошибка в схеме. Например books — это библиотека, но её поля почему-то относятся к конкретной книге, а не всем хранимым экземплярам класса Book,;причём методы относятся ко всем книгам сразу, а не к конкретной книге…
Иными словами, вы пропустили базы данных в вашей иерархии. Так, должен быть класс Library, который отвечает за работу с книгами и за права доступа к книгам. Тогда у отдельных книг должно быть поле-ссылка на библиотеку, следовательно, библиотека должна «внедрять зависимости» в книги (чтобы зависимости стали частью состояния класса).
