Лучший ООП подход для этого простого приложения PHP? - PullRequest
0 голосов
/ 25 марта 2012

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

Я новичок, но я знаю основы ООП, классы, наследование, сеттеры и геттеры и все такое классное жаргоне, но я изо всех сил пытаюсь решить, какие части этого приложения должны быть объектами, должен ли я создавать курсы и классы учеников или добавлять, редактировать и удалять классы?Буду признателен за любые советы о том, как подходить и визуализировать такую ​​проблему.

Ответы [ 4 ]

5 голосов
/ 25 марта 2012

Очень грубо: вот как бы я это сделал:

  1. Храните ваши данные в SQL или XML. Вам понадобятся две таблицы SQL, одна для студентов и одна для курсов. Вы можете использовать один файл XML, содержащий все данные, или два файла (которые я рекомендую).

  2. Создайте класс с именем, например, dataItem со свойством типа '$ arr_fields', соответствующим одной записи данных (одной строке в таблице SQL или записи XML).

  3. Класс dataItem должен иметь следующие методы (все открытые):

    • loadFromSQL() (или loadFromXML())
    • saveToSQL () (или saveToXML ())
    • add(), edit() и delete()
    • a view() метод с использованием HTML
    • Эти методы, очевидно, используются для чтения и записи данных между данными SQL / XML и $ arr_fields класса, а также для отображения данных в $ arr_fields. Ключами $ arr_fields являются имена столбцов SQL (или теги XML или имена атрибутов) для конкретной таблицы SQL.
  4. Старайтесь не вызывать loadFromSQL () или saveToSQL () в своем конструкторе или в любом другом методе, который используется для изменения только данных класса. Храните эти действия отдельно. РЕДАКТИРОВАТЬ: Это личное предпочтение, которое помогает мне отслеживать состояние моих объектов.

  5. Создание классов учеников и курсов, расширяющих класс dataItem.

  6. Вы можете переопределить методы, например, метод view(), внутри ваших расширенных классов, если вам нужно.

  7. Затем вы можете вызывать методы в Студентах и ​​Курсах из объекта Admin (как предложено rcdmk) или, возможно, из классов StudentFolder и CourseFolder, метод view () которых содержит кнопки для действий, которые необходимо выполнить. (Пусть StudentFolder и CourseFolder расширяют создаваемый вами класс Folder.)

ОБНОВЛЕНИЕ:

Например: если ваш первичный ключ в таблице SQL равен id, то loadFromSQL ($ id, $ tablename) dataItem должен установить $ arr_fields так, чтобы его ключами были имена столбцов, а его значениями были значения из строки первичное значение которого равно $ id.

В Студентах вы можете затем переопределить loadFromSQL () следующим образом:

class Students extends dataItem {

  // other attributes 

   public function loadFromSQL($id) {
     parent::loadFromSQL($id, "Students");
   }

}

EDIT: При повторном рассмотрении может быть лучше установить $ arr_fields ["id"] = $ id, а также установить $ tablename с помощью конструктора для dataItem - тогда вам никогда не придется переопределять loadFromSQL () или указывать параметры для него. loadFromSQL () должен загрузить запись, если она существует. saveToSQL () должен сохранить $ arr_fields в SQL, если установлено значение $ arr_fields ["id"], и создать новую запись, если она не установлена. В любом случае, вы должны найти согласованный способ взаимодействия с данными, который работает для вас, это всего лишь возможности.

Однако, если у вас нет опыта работы с ООП и SQL или XML, возможно, вы открываете банку с червями для себя, и может быть лучше просто выполнить свое назначение, используя только функции и массивы php для ваших данных. Если у вас нет времени учиться ...

2 голосов
/ 25 марта 2012

Вы говорите, что знаете основы ООП, однако спрашиваете, должны ли вы создавать курсы, классы учеников ИЛИ добавлять, удалять, редактировать классы. Ну, может быть, есть и другие практики, но я думаю, что самая популярная и единственная, что мне известно, - это использовать существительные в качестве классов и глаголы в качестве своих методов. Следовательно, интуитивно что-то не так с классом «Добавить» или «Редактировать». Что бы я сделал на моем месте, это подумал обо всех «сущностях», которые можно было бы считать объектом - таких как Студент, Курс, Лектор, Класс (Комната), и в зависимости от того, насколько продвинутой должна быть ваша модель, вы можете добавить больше как Построение и т. Д. Затем попробуйте реализовать базовые вещи, такие как создание нового студента, регистрация на курс, ассоциирование учителя с курсом и т. Д. Как только он у вас есть и ЭТО РАБОТАЕТ , возможно, вы захотите добавить более сложные вещи, как наследство. Например, вы можете сказать, что Учитель и Ученик - это Персона, поэтому вы можете создать такой абстрактный класс и использовать наследование.

2 голосов
/ 25 марта 2012

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

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

2 голосов
/ 25 марта 2012

С простой точки зрения:

Абстрагируйте основные объекты как классы и используйте методы для действий этих объектов:

Студент (объект) удаляется (действие) администратором (объект), поэтому

Административный класс будет иметь метод deleteStudent, потому что Администратор удаляет Студентов.

Еще одна задача - сконцентрировать все связанные со Студентом действия в классе Студента:

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

Любой, кто считает это лучшим объяснением, может редактировать эту вики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...