Требуется выполнить данное задание:
Нужно написать на PHP с использованием ООП веб-приложение для работы с телефонными номерами, состоящими из кода страны, кода города, номера телефона и комментария. Номера нужно хранить в таблице MySQL, веб-интерфейс - список (постраничная разбивка и сортировка по названиям колонок не нужны) со ссылками для изменения и удаления каждой записи, сверху - окно поиска (ищем всё что ввели сразу по всем полям) и ссылка для добавления номера. По нажатию на ссылки добавления и изменения открывается форма для редактирования всех полей номера, сохранение формы возвращает обратно к списку, если нет ошибок, с сообщением, что всё успешно сохранено, если есть ошибки - открывается форма, заполненная введёнными данными с информацией об ошибках (либо возле каждого поля, либо общим списком ошибок сверху). Проверки формы должны быть на PHP, использовать JavaScript для этого не нужно. После нажатия на кнопку поиска, а также без поискового запроса, нужно
писать, сколько номеров найдено. Искать - просто подстроку по всем полям таблицы с телефонами.
Предполагается следующий набор классов: номер телефона, список номеров, форма редактирования номера, контроллер веб-приложения. Пояснение по классу номера телефона: там должны быть реализованы методы получения данных из БД (загрузка из БД в свойства класса), доступа к данным (геттеры), записи данных в объект класса (сеттеры), сохранения данных в БД. Использование библиотек и фреймворков нежелательно.
Хотелось бы получить несколько советов. Какова должна быть структура классов(если считаете что эта не подходит к данной задаче) и каким набор свойств и методов должны обладать классы приложения?
Очень нужна помощь именно в проектировании, думал над структурой приложения и зашел в тупик=( Изначально предполагал сделать класс номера и два дочерних первый - список номеров, второй - форма редактирования. Которые будут наследовать от родительского класса свойства номера. Но при таком подходе класс список номеров будет вытаскивать все номера из бд по 1-й записи что не есть хорошо а если делать свое метод получения списка из бд то теряется смысл наследования. То же самое с формо редактирования если делать свои классы изменения и удоления но ведь вставка и селект уже реалезованы в родительском классе есть ли смысл отделять эти методы.
Спасибо за внимание жду ваших советов!
1. Jmunb - 22 Ноября, 2011 - 11:04:01 - перейти к сообщению
2. Jmunb - 22 Ноября, 2011 - 13:33:40 - перейти к сообщению
Быть может было бы верным реализовать какой либо патерн в рамках данного задания?
3. tuareg - 22 Ноября, 2011 - 13:55:13 - перейти к сообщению
А Вам ООП надо потому, что это условие ТЗ?
4. Jmunb - 22 Ноября, 2011 - 14:10:56 - перейти к сообщению
tuareg пишет:
А Вам ООП надо потому, что это условие ТЗ?
Собственно ДА. Так как я считаю что в такой задаче использование ооп это все равно что из пушки по воробьям
5. tuareg - 22 Ноября, 2011 - 14:44:39 - перейти к сообщению
Ну и сделайте 2 класса один подключение к Бд, второй список телефонов(или вообще один--->список телефонов) и все.
P.S. Я не знаю ООП, просто так будет проще "И волки сыты(Вы выполните заказ) и овцы целы(заказчики получат ООП)"
P.S. Я не знаю ООП, просто так будет проще "И волки сыты(Вы выполните заказ) и овцы целы(заказчики получат ООП)"
6. Jmunb - 22 Ноября, 2011 - 14:57:06 - перейти к сообщению
Вы плохо знаете наших волков
Класс БД само сабой разумеется он даже в тз не пишется.
а 1-го класса номер маловато будет
Такое чувство что все спят дома
Класс БД само сабой разумеется он даже в тз не пишется.
а 1-го класса номер маловато будет
Такое чувство что все спят дома
7. Мелкий - 22 Ноября, 2011 - 14:58:50 - перейти к сообщению
tuareg, у меня вполне стойкое ощущение, что это никакой не заказ, а тестовая задача перед приглашением на собеседование.
А судя по прошлой теме и разнице в датах - не взяли.
Я бы от соискателя хотел видеть полноценную реализацию MVC, фабрики или синглтона для базы. Достаточно. Но плодить классы ради классов - не нужно.
А судя по прошлой теме и разнице в датах - не взяли.
Я бы от соискателя хотел видеть полноценную реализацию MVC, фабрики или синглтона для базы. Достаточно. Но плодить классы ради классов - не нужно.
8. Jmunb - 22 Ноября, 2011 - 15:09:40 - перейти к сообщению
Мелкий пишет:
tuareg, у меня вполне стойкое ощущение, что это никакой не заказ, а тестовая задача перед приглашением на собеседование.
А судя по прошлой теме и разнице в датах - не взяли.
Я бы от соискателя хотел видеть полноценную реализацию MVC, фабрики или синглтона для базы. Достаточно. Но плодить классы ради классов - не нужно.
А судя по прошлой теме и разнице в датах - не взяли.
Я бы от соискателя хотел видеть полноценную реализацию MVC, фабрики или синглтона для базы. Достаточно. Но плодить классы ради классов - не нужно.
Какой из паттернов по вашему мнению в данной ситуации более подходящий для данной задачи?
9. Мелкий - 22 Ноября, 2011 - 17:47:41 - перейти к сообщению
Jmunb пишет:
Какой из паттернов по вашему мнению в данной ситуации более подходящий для данной задачи?
0) я уже перечислил 3 паттерна.
1) некорректно поставлен вопрос. Выбор одного шаблона не исключает использование другого шаблона в этом проекте, а то и тут же.
10. EGORR - 22 Ноября, 2011 - 18:03:45 - перейти к сообщению
Jmunb, а почему вы Проэктирование через "э" пишите?
Это сленг такой?
Прости, модер, за оффтоп...
Это сленг такой?
Прости, модер, за оффтоп...
11. Jmunb - 24 Ноября, 2011 - 22:58:04 - перейти к сообщению
В общем начал с класса работы с бд
Использую класс PDO, реализую как Singleton.
Вот код
Использую класс PDO, реализую как Singleton.
Вот код
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- [SRC PHP]class MysqlPDO
- {
- private $PDOInstance = null; //Экземпляр класса PDO
- private static $instance = null; //Экземпляр класса MysqlPDO
- const DEFAULT_SQL_USER = 'root'; //Постоянное имя пользователя
- const DEFAULT_SQL_HOST = 'localhost'; //Постоянный адрес хоста
- const DEFAULT_SQL_PASS = ''; //Постоянный пароль пользователя
- const DEFAULT_SQL_DTB = 'b2b'; //Постоянное название базы данных
- const DEFAULT_SQL_CHARSET = 'utf8'; //Кодировка
- /**
- * Конструктор
- */
- private function __construct() {
- $this->PDOInstance = new PDO('mysql:dbname='.self::DEFAULT_SQL_DTB.';host='.self::DEFAULT_SQL_HOST, self::DEFAULT_SQL_USER ,self::DEFAULT_SQL_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES '.self::DEFAULT_SQL_CHARSET));
- }
- /*
- *Защищаем от клонирование
- */
- final private function __clone() {}
- /*
- *Защищаем от создания через unserialize
- */
- final private function __wakeup() {}
- /**
- * Создает и возвращает объект класса MysqlPDO
- */
- final public static function getInstance() {
- self::$instance = new MysqlPDO();
- }
- return self::$instance;
- }
- /**
- * Выполняем SQL запрос в PDO
- */
- public function query($query) {
- return $this->PDOInstance->query($query);
- }
- // Выполняет запросы к БД
- return $this->PDOInstance->prepare($statement, $driver_options);
- }
- /*
- *Деструктор
- */
- public function __destruct() {
- }
- }[/SRC]
С PDO работаю недавно так что не все еще понятно. Например как лучше обрабатывать ошибки? Как лучше выполнять запросы? И вообще какие функции нужно еще реализовать в данном классе в рамках ТЕЛЕФОННОГО СПРАВОЧНИКА?
(Добавление)
ах да ну и пример использования
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- require_once("classes/mysqlPDO.class.php");
- foreach (MysqlPDO::getInstance()->query('SELECT user_id, ip , uri , time FROM `log`') as $membre) {
- }