Лучший подход для дизайна отношений класса ООП - PullRequest
1 голос
/ 16 марта 2010

У меня возникла дилемма проектирования. У меня есть класс с именем UserAccount, представляющий пользователя, который имеет возможность войти в школьную систему и получить доступ к информации, такой как курсы, которые он / она посещает, аватар, новости и т. Д. Затем есть другой класс с именем Course, который представляет любой данный курс. в этой школе. Он содержит такую ​​информацию, как количество студентов, которые проходят этот курс в этом семестре, идентификационный номер курса и т. Д.

Таким образом, UserAccount имеет такой метод

UserAccount user = new UserAccount("username", "password");
user.login();
Array<Courses> courses = user.getCourses();

Этот метод getCourses () возвращает массив курсов с курсами, которые посещает пользователь. Очевидно, что пользователь объекта содержит ссылку на курсы, которые он / она проходит.

Но, и вот в чем моя проблема, курс должен получить доступ к информации с сервера (используя REST), но все запросы должны быть отправлены с файлом cookie сеанса и некоторой информацией пользователя. Так или иначе, курс должен знать, какой пользователь пытается получить информацию. Для меня кажется неправильным, что курс содержит ссылку на пользователя, и необходимость передавать пользователя в качестве параметра методу курса, которому нужна эта информация, также представляется неправильной.

У кого-нибудь есть лучшее решение?

ПРИМЕЧАНИЕ: У меня нет контроля над тем, как была спроектирована система, я должен был сказать, что на самом деле нет общедоступного API, я отбрасываю ответы html, поэтому я не знаю, как система был реализован, и мне не нужно проверять, какие курсы посещает студент, эта информация предоставляется сервером с помощью простого запроса. Как я уже говорил ранее, проблема заключается в том, что когда мне нужно сделать запрос к серверу (относительно информации о курсах), я должен отправить cookie сеанса и некоторую другую непубличную информацию, которая хранится в объекте пользователя, потому что пользователь должен авторизовался для получения информации из системы. Дело в том, что не естественно, что в курсе есть ссылка на студента.

Ответы [ 3 ]

0 голосов
/ 16 марта 2010

Итак, включает ли ваша база данных таблицу перекрестных ссылок, чтобы связать пользователя с курсом (и наоборот)? Эта таблица «многие ко многим» позволила бы методу getCourses заполнить коллекцию курсов для предоставленного пользователем (вы бы передавали идентификатор пользователя методу getCourses - я вижу, что было бы неправильно при передаче идентификатора пользователя в класс курса) , В свою очередь таблица внешних ссылок также позволит вам найти всех пользователей, проходящих определенный курс. То, как вы организуете методы для получения данных в разных классах, действительно зависит от того, как вы решите думать об отношениях между вашими объектами.

0 голосов
/ 16 марта 2010

Курс не должен делать запросы, если у него нет данных. Решения, которые я вижу:

  • Другой объект может собрать данные от пользователя и курса и выполнить запрос.
  • Не возвращать курсы от пользователя, но пользовательский курс или что-то, связанное с пользователем, которое будет содержать ссылку на пользователя и курс.
  • Передать пользователя в качестве параметра методу, выполняющему запросы, требующие пользовательских данных.
  • В конце концов понимаете, что Курс может быть связан с Пользователем, и дайте ссылку на пользователя на Курс?
0 голосов
/ 16 марта 2010

Просто проверьте массив курсов студента, чтобы узнать, идет ли он на курс, к которому он пытается получить доступ, у вас уже есть эти записи в классе студента, и если пользователь не может свободно изменять свои курсы без каких-либо ограничений (чего он не должен ), в этом не должно быть проблем.

Хотя вы могли бы избежать многих головных болей, если бы просто поместили запись о том, какие студенты проходят определенный курс, внутри самого курса (P.S. Вот как это делают базы данных)

...