2012-01-22 3 views
3

Я разрабатываю веб-приложения PHP довольно долго, но теперь изучаю подход ООП. Чтобы учиться и практиковать, я разрабатываю простое веб-приложение «Вопросы множественного выбора». Когда зарегистрированный пользователь входит в систему, ему предоставляется список опросов. Он выбирает один и получает вопросы с несколькими ответами, причем любой из них правильный.Изучение ООП PHP: определение классов, ассоциаций для системы викторинга

Мои вопросы:

  1. Каковы правила для идентификации классов? Я думаю, что «Викторина», «Вопросы» и «Ответы» могут быть объявлены классами. Я прав?
  2. Каковы будут типы ассоциаций среди этих классов (или те, которые вы предлагаете ). Каковы правила идентификации ассоциации?
  3. Как отделить или представить классы системы (например, базы данных, проверки классов) и классов бизнес-домена?

Буду признателен, если ответы могут быть предоставлены в контексте системы викторин, поскольку я много читал о примерах класса «Животные-Собака» ... Спасибо заранее за вашу поддержку.

+0

Отличная книга, хотя она не специфична для PHP, является проектом, управляемым доменами Эриком Эвансом. В этой книге он освещает многие вопросы, которые вы задаете, например, как определить классы домена и отдельные уровни беспокойства. – eli

ответ

0

Ну, как я вижу, ООП пытается сделать вещи более простыми, более доступными и более читаемыми для нас, программистами.

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

  • Какие функции мне нужно реализовать?
  • Есть ли у меня функции, которые поддерживают аналогичный элемент в моем проекте?

Вот пример из моего текущего проекта: я делаю аналитическую систему, представляющую графики для пользователей. Я сделал 2 класса, один называется analytic, а второй называется analyticQueries. Первый отвечает за все обновления базы данных аналитики, а второй отвечает за прием данных из базы данных и подготовку их к графическому движку.

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

Другим способом мышления классов (а также хороший способ планирования вашей базы данных) задают следующие вопросы:

  • Кто использует проект?
  • Каковы действия тех, кто его использует?
  • Кто использует кого? (Это может помочь вам в создании ассоциаций. В моем проекте оба аналитических класса подключаются к базе данных. Я мог бы сделать третий класс DBConnection и включить его в оба класса, но я думал, что он не будет таким большим и это не то, что является достаточно центральным в проекте, который нуждается в его собственном классе).

На вашем сайте пользователи - пользователи, которые входят в систему, поэтому вам обязательно понадобится таблица user в вашей базе данных. Вам обязательно понадобится стол questions и, возможно, answers.

Вы можете решить, хотите ли вы классы на основе вашей базы данных, например, userManager может быть классом с функцией, ответственной за все действия пользователей (Логин, информация об обновлении и т. Д.) И иметь questionManager, который будет обрабатывать вопросы представления и проверки ответов.

3

Особый вкус ООП, который вы найдете полезным, - это парадигма Model View Controller.

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

В MVC, эти классы, как правило, делится на (в упрощенном виде):

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

  • Просмотры: это не классы, а ваши необработанные HTML-шаблоны, которые имеют данные из ваших моделей, вводимых через контроллер. В вашем случае одним из представлений может быть вопрос. Другой может представлять страницу индекса. Еще один может представить результаты опроса.

  • Контроллеры: классы, которые действуют как средний человек между вашим видом и вашей моделью. Они будут извлекать данные из соответствующих моделей и передавать их в представление. В вашем случае это может быть контроллер Quiz. Он выберет запрошенный вопрос из базы данных и предоставит его представлению, и когда ответ будет отправлен, контроллер передаст его модели, чтобы проверить, правильно ли это, и действовать соответствующим образом.

За этим MCV находится каркас (предварительно сделанный, или тот, который вы свернутые себя), что обеспечивает ряд библиотек и уровни абстракции, чтобы помочь вам сосредоточиться на логике приложения. Таким образом, будут абстракции базы данных, такие как ActiveRecord, будут обертки для общеупотребительных процедурных функций, представленных в контексте ООП, там будут системы шаблонов, которые помогут передавать данные на ваш взгляд и форматировать их и т. Д.

Если вы хотите отправиться в этом направлении, рассмотрите возможность использования существующего фрейма, например, CakePHP или CodeIgniter, чтобы дать вам головной убор. Они знакомят вас с ООП (в некоторой степени) и как использование классов может быть полезным для крупных проектов.

Смежные вопросы