Метод класса вписывается в класс который осуществляет действие или в класс над которым осуществляют действие?
Есть сущности: участник, модератор, книга, опрос
Модератор создает/редактирует/удаляет опросы, добавляет книги
Участник голосует в опросах
Модератор и участник могут просматривать страницы книг и осуществлять поиск по книгам
Метод класса вписывается в класс который осуществляет действие или в класс над которым осуществляют действие? Правильно ли написаны методы в классах? или методы VotePoll, Create, Update, Delete должны быть в сущности Poll?
Дополнительно:
Содержание
Соглашусь с одним из комментаторов, не хватает в этой иерархии контроллеров и хранилищ данных. Книги и опросы - это просто сущности с данными, отвечающими за какой-то один опрос или книгу. Хранилище имеет CRUD-методы, а контроллер отвечает за то, чтобы получить команду доступа, может быть проверить права доступа, обратиться к хранилищу и вернуть результат. Можно 6азывать это даже не контроллером, а пользовательским сценарием (так называемый UseCase).
Модератора и пользователя в такой схеме сложно будет разграничивать на уровне доступов. Я бы тоже свёл их в одну сущность с полем, определяющим доступ. И на уровне его уже на разных этапах решать какие действия можно выполнять.
Уфф, 5 раз прочитал, пока понял. Второе.
Метод класса вписывается в класс который над которым осуществляют действие.
Собственно, определение класса - это "данные и методы для работы с ними". С ними. А не с данными чужих объектов.
Сущность Модератор в данном случае вообще не нужна, достаточно свойства в сущности Пользователь (кстати, откуда вы все берете этих "участников"? Участник бывает у события, а не у сущности. Вы же не говорите "участник 5А класса?")
Связей здесь должно быть значительно меньше.
Если модератор не упоминается ни в опросе, ни в добавленной книге, то и связи между ними никакой нет.
В текущей схеме должна быть только одна связь: опроса с прошедшим его пользователем. Одним из свойств опроса будет экземпляр класса Пользователь. Причем это касается класса РезультатОпроса, которого нет на диаграмме. А он должен быть. И вот он будет связан с классом Опрос.
Чего здесь не хватает - это интерфейса. Классов-контроллеров. Которые собственно эти методы и вызывают.
Какой-нибудь BookController.add(), который принимает, скажем, два объекта, Пользователь и Инпут, и проверяет, является ли пользователь модератором. И если да, то создает объект Book, и используя данные из инпута, вызывает Book.add()
И то же самое с опросами
Еще по-хорошему должен быть BookRepository. Потому что если книга умеет сама себя добавлять в хранилище, то это считается плохим тоном. Должен быть отдельный объект Хранилище Книг, в котором и будут методы добавления и поиска.
- ну всё, мы его потеряли на неделю)) пока разгребет) там и до SOLID дойдет
- спасибо! это не полная диаграмма классов, а несколько сущностей для примера. в полной диаграмме есть класс юзер (от которого наследуются модератор и участник), сущность участник так называется, потому что того требует предметная область (система про клубы: юзеры-модераторы создают клубы, юзеры-участники соответственно вступают в них). сущность "опрос" связана с сущностью "клуб" связью композиции.
Не могли бы вы объяснить, почему сущность Модератор не нужна если создание клуба и опроса в клубе доступно только модераторам? - Так я же написал, модератор - это всего лишь права доступа. Зачем для этого отдельный класс?
- Ипатьев, хорошо, то есть наследуемые классы (модератор, участник) не нужны и класс юзер надо связать с классом опрос, прописав в классе опроса методы CRUD и voite, так?
- Я писал выше, что объединять в одном классе и саму сущность (опрос) и CRUD для неё - это не очень хорошая практика. Но для простоты можно сделать в одном.
Что должен делать метод vote(), я не очень понимаю.
Но в целом да, у класса Опрос должен быть метод пройтиОпрос, который должен возвращать экземпляр еще одного класса, РезультатОпроса. - Ипатьев, спасибо за разъяснения!
Ответы:
Если кратко: класс управляет только своим состоянием.
У вас ошибка в схеме. Например books - это библиотека, но её поля почему-то относятся к конкретной книге, а не всем хранимым экземплярам класса Book,;причём методы относятся ко всем книгам сразу, а не к конкретной книге...
Иными словами, вы пропустили базы данных в вашей иерархии. Так, должен быть класс Library, который отвечает за работу с книгами и за права доступа к книгам. Тогда у отдельных книг должно быть поле-ссылка на библиотеку, следовательно, библиотека должна "внедрять зависимости" в книги (чтобы зависимости стали частью состояния класса).
Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.
Оставить комментарий Отменить
Ответы
- Есть ответ! к записи Как уменьшить масштаб меньше 100% в Windows 10 (22H2)
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Как называется человек, который дизайн придумает для сайта и сверстает его?
- Есть ответ! к записи Можно ли установить Яндекс.Диск на АльтЛинукс?
- Есть ответ! к записи Картинки мутные только на сафари, есть выход?
- Есть ответ! к записи Keenetic. Как настроить SSTP клиент с сертификатом?
- Есть ответ! к записи Чем заменить executor в aiogram 3?

Метод класса должен быть определен в самом классе, который осуществляет действие.
Когда мы говорим о классах в объектно-ориентированном программировании, каждый класс представляет собой шаблон или описание для создания объектов. Методы класса представляют собой функции или действия, которые объекты этого класса могут выполнять.
Поэтому, если метод относится к действию, которое выполняется объектом этого класса, то он должен быть определен в самом классе. Это обеспечивает логическую структуру и упорядоченность кода, так как все методы, относящиеся к одному классу, будут находиться в одном месте.
Например, если у нас есть класс "Кошка", и у нас есть метод "мяукать", который представляет собой действие, которое кошка может выполнить, то этот метод должен быть определен в классе "Кошка".
Таким образом, метод класса должен быть определен в классе, который осуществляет действие, чтобы код был структурирован и понятен.
Метод класса следует определять в том классе, который осуществляет действие. Это связано с основными принципами объектно-ориентированного программирования, такими как инкапсуляция и сокрытие данных.
Когда метод определен в классе, который осуществляет действие, это позволяет лучше организовать код и структуру программы. Класс, который выполняет действие, обычно содержит данные и методы, которые работают с этими данными. Таким образом, методы класса должны быть определены в том классе, который имеет прямое отношение к этим данным.
Например, если у нас есть класс "Клиент", который содержит информацию о клиентах, то методы для работы с этой информацией (например, методы для добавления, удаления, обновления клиентов) должны быть определены в классе "Клиент".
Это помогает сделать код более читаемым, поддерживаемым и масштабируемым. Кроме того, такой подход позволяет легко расширять функциональность программы, добавляя новые методы в соответствующие классы.
Пример определения метода класса в PHP:
В данном примере методы setName и getName определены в классе Client, который содержит данные о клиенте. Такой подход помогает сделать код более структурированным и понятным.