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

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

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

Метод класса вписывается в класс который осуществляет действие или в класс над которым осуществляют действие? Правильно ли написаны методы в классах? или методы VotePoll, Create, Update, Delete должны быть в сущности Poll?

Дополнительно:

Соглашусь с одним из комментаторов, не хватает в этой иерархии контроллеров и хранилищ данных. Книги и опросы - это просто сущности с данными, отвечающими за какой-то один опрос или книгу. Хранилище имеет CRUD-методы, а контроллер отвечает за то, чтобы получить команду доступа, может быть проверить права доступа, обратиться к хранилищу и вернуть результат. Можно 6азывать это даже не контроллером, а пользовательским сценарием (так называемый UseCase).
Модератора и пользователя в такой схеме сложно будет разграничивать на уровне доступов. Я бы тоже свёл их в одну сущность с полем, определяющим доступ. И на уровне его уже на разных этапах решать какие действия можно выполнять.

Уфф, 5 раз прочитал, пока понял. Второе.

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

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

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

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

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

  • ну всё, мы его потеряли на неделю)) пока разгребет) там и до SOLID дойдет
  • спасибо! это не полная диаграмма классов, а несколько сущностей для примера. в полной диаграмме есть класс юзер (от которого наследуются модератор и участник), сущность участник так называется, потому что того требует предметная область (система про клубы: юзеры-модераторы создают клубы, юзеры-участники соответственно вступают в них). сущность "опрос" связана с сущностью "клуб" связью композиции.
    Не могли бы вы объяснить, почему сущность Модератор не нужна если создание клуба и опроса в клубе доступно только модераторам?
  • Так я же написал, модератор - это всего лишь права доступа. Зачем для этого отдельный класс?
  • Ипатьев, хорошо, то есть наследуемые классы (модератор, участник) не нужны и класс юзер надо связать с классом опрос, прописав в классе опроса методы CRUD и voite, так?
  • Я писал выше, что объединять в одном классе и саму сущность (опрос) и CRUD для неё - это не очень хорошая практика. Но для простоты можно сделать в одном.

    Что должен делать метод vote(), я не очень понимаю.
    Но в целом да, у класса Опрос должен быть метод пройтиОпрос, который должен возвращать экземпляр еще одного класса, РезультатОпроса.

  • Ипатьев, спасибо за разъяснения!

Ответы:

Если кратко: класс управляет только своим состоянием.

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

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

 

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

 

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

    Метод класса должен быть определен в самом классе, который осуществляет действие.

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

    Поэтому, если метод относится к действию, которое выполняется объектом этого класса, то он должен быть определен в самом классе. Это обеспечивает логическую структуру и упорядоченность кода, так как все методы, относящиеся к одному классу, будут находиться в одном месте.

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

    Таким образом, метод класса должен быть определен в классе, который осуществляет действие, чтобы код был структурирован и понятен.

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

    Метод класса следует определять в том классе, который осуществляет действие. Это связано с основными принципами объектно-ориентированного программирования, такими как инкапсуляция и сокрытие данных.

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

    Например, если у нас есть класс "Клиент", который содержит информацию о клиентах, то методы для работы с этой информацией (например, методы для добавления, удаления, обновления клиентов) должны быть определены в классе "Клиент".

    Это помогает сделать код более читаемым, поддерживаемым и масштабируемым. Кроме того, такой подход позволяет легко расширять функциональность программы, добавляя новые методы в соответствующие классы.

    Пример определения метода класса в PHP:

    В данном примере методы setName и getName определены в классе Client, который содержит данные о клиенте. Такой подход помогает сделать код более структурированным и понятным.

Оставить комментарий