Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проэктирование телефонного справочника.
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Проэктирование телефонного справочника.

Страниц (1): [1]
 

1. Jmunb - 22 Ноября, 2011 - 11:04:01 - перейти к сообщению
Требуется выполнить данное задание:

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

Предполагается следующий набор классов: номер телефона, список номеров, форма редактирования номера, контроллер веб-приложения. Пояснение по классу номера телефона: там должны быть реализованы методы получения данных из БД (загрузка из БД в свойства класса), доступа к данным (геттеры), записи данных в объект класса (сеттеры), сохранения данных в БД. Использование библиотек и фреймворков нежелательно.

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

Очень нужна помощь именно в проектировании, думал над структурой приложения и зашел в тупик=( Изначально предполагал сделать класс номера и два дочерних первый - список номеров, второй - форма редактирования. Которые будут наследовать от родительского класса свойства номера. Но при таком подходе класс список номеров будет вытаскивать все номера из бд по 1-й записи что не есть хорошо а если делать свое метод получения списка из бд то теряется смысл наследования. То же самое с формо редактирования если делать свои классы изменения и удоления но ведь вставка и селект уже реалезованы в родительском классе есть ли смысл отделять эти методы.

Спасибо за внимание жду ваших советов!
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. Я не знаю ООП, просто так будет проще "И волки сыты(Вы выполните заказ) и овцы целы(заказчики получат ООП)"
6. Jmunb - 22 Ноября, 2011 - 14:57:06 - перейти к сообщению
Вы плохо знаете наших волков
Класс БД само сабой разумеется он даже в тз не пишется.
а 1-го класса номер маловато будет

Такое чувство что все спят дома
7. Мелкий - 22 Ноября, 2011 - 14:58:50 - перейти к сообщению
tuareg, у меня вполне стойкое ощущение, что это никакой не заказ, а тестовая задача перед приглашением на собеседование.
А судя по прошлой теме и разнице в датах - не взяли.

Я бы от соискателя хотел видеть полноценную реализацию MVC, фабрики или синглтона для базы. Достаточно. Но плодить классы ради классов - не нужно.
8. Jmunb - 22 Ноября, 2011 - 15:09:40 - перейти к сообщению
Мелкий пишет:
tuareg, у меня вполне стойкое ощущение, что это никакой не заказ, а тестовая задача перед приглашением на собеседование.
А судя по прошлой теме и разнице в датах - не взяли.

Я бы от соискателя хотел видеть полноценную реализацию 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.

Вот код
PHP:
скопировать код в буфер обмена
  1. [SRC PHP]class MysqlPDO
  2. {
  3.         private $PDOInstance = null;    //Экземпляр класса PDO
  4.         private static $instance = null;        //Экземпляр класса MysqlPDO
  5.        
  6.         const DEFAULT_SQL_USER = 'root';        //Постоянное имя пользователя
  7.         const DEFAULT_SQL_HOST = 'localhost';   //Постоянный адрес хоста
  8.         const DEFAULT_SQL_PASS = '';    //Постоянный пароль пользователя
  9.         const DEFAULT_SQL_DTB = 'b2b';  //Постоянное название базы данных
  10.         const DEFAULT_SQL_CHARSET = 'utf8';     //Кодировка
  11.  
  12.         /**
  13.         * Конструктор
  14.         */
  15.         private function __construct() {
  16.                 $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));
  17.         }
  18.        
  19.         /*
  20.         *Защищаем от клонирование
  21.         */
  22.         final private function __clone() {}
  23.        
  24.         /*
  25.         *Защищаем от создания через unserialize
  26.         */
  27.         final private function __wakeup() {}
  28.        
  29.         /**
  30.         * Создает и возвращает объект класса MysqlPDO
  31.         */
  32.         final public static function getInstance() {
  33.                 if(is_null(self::$instance)) {
  34.                         self::$instance = new MysqlPDO();
  35.                 }
  36.                 return self::$instance;
  37.         }
  38.  
  39.         /**
  40.         * Выполняем SQL запрос в PDO
  41.         */
  42.         public function query($query) {
  43.                 return $this->PDOInstance->query($query);
  44.         }
  45.        
  46.         // Выполняет запросы к БД
  47.         public function prepare($statement, $driver_options = array()) {
  48.                 return $this->PDOInstance->prepare($statement, $driver_options);
  49.         }
  50.        
  51.         /*
  52.         *Деструктор
  53.         */
  54.         public function __destruct() {
  55.                 unset($this->PDOInstance);
  56.         }
  57. }[/SRC]

С PDO работаю недавно так что не все еще понятно. Например как лучше обрабатывать ошибки? Как лучше выполнять запросы? И вообще какие функции нужно еще реализовать в данном классе в рамках ТЕЛЕФОННОГО СПРАВОЧНИКА?
(Добавление)
ах да ну и пример использования
PHP:
скопировать код в буфер обмена
  1.  
  2. require_once("classes/mysqlPDO.class.php");
  3.        
  4. foreach (MysqlPDO::getInstance()->query('SELECT user_id, ip , uri , time FROM `log`') as $membre) {
  5.         echo '<pre>', print_r($membre) ,'</pre>';
  6. }

 

Powered by ExBB FM 1.0 RC1