ФорумПрограммированиеPHP для идиотов → Помогите с правильной организацией структуры

Помогите с правильной организацией структуры

  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 3 мая 2008 г. 15:04

    Вобще я тут писал-писал и поймал себя на том что у меня одна часть написана одним образом а вторая вторым. помогите разобраться какой способ лучше

    Задача: написать чтото типа админки, например .
    получаем из урла параметр с тем что нужно сделать. грубо говоря add edit del. не важно чего, пользователя страницы, еще чегото.

    Способ первый

    admin.php

    file = "path/to/file/".$_GET['action'].".php";
    if (file_exists($file)){
    require_once($file);


    add.php

    $db->Exexute("INSERT INTO …");


    del.php

    $db->Exexute("DELETE FROM …");


    Способ второй

    admin.php

    switch($_GET['action']){
    case 'add':
    $db->Exexute("INSERT INTO …");
    break;
    case 'del':
    $db->Exexute("DELETE FROM …");
    break;
    }


    Чесно говоря мне первый способ нравиться больше, но дело в том что каждый файл будет содержать всего по паре строчек кода, ну не больше 10 точно. И мне вот интересно стоит ли иметь 150 мелких файлов или 30 больших но со свичами.
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 3 мая 2008 г. 15:17, спустя 13 минут 45 секунд

    file = "path/to/file/".$_GET['action'].".php"; - грубая ошибка, дыра в безопасности..
    ну и 150 файлов меня бы напрягло.. хотя у меня вообще другая организация кода была бы.
    switch($_GET['action']){
    case 'add':
    $USER->add($prm);
    break;
    case 'del':
    $USER->del($prm);
    break;
    }


    и добавление юзера и еще чего-нить осуществлялась бы всё-таки разными скриптами..
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 3 мая 2008 г. 15:24, спустя 6 минут 12 секунд

    кстати, когда-то давно действительно было организовано похоже, в одной из моих первых прог, если не в самой первой.. не, классы там конечно были, но все акшины - добавления/удаления, были в одном файле…
    мне до сих пор за этот скрипт стыдно :)
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 3 мая 2008 г. 15:24, спустя 46 секунд

    блин я знал что мне сразу же расскажут что у меня в коде дыры!
    Вопрос то не об этом, вопрос о том лучше 150 мелких файлов со своим четким функционалом в каждом или 30 больших со свичем.

    кстати мне очень понравился подход $USER->del($prm); это что юзер сам себя должен удалить? простите конечно я не настолько силен в паттернах чтобы использовать такие мозговыверты. а проще говоря функция del никак не должна принадлежать классу пользователя потому что он не пользуеться ей каждый день по нескольку раз, или на этом форуме не так?!

    если уже речь пошла о
    $USER->del($prm);
    то достаточно удалить его из одной таблицы а в остальных его удалят триггеры
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 3 мая 2008 г. 15:29, спустя 4 минуты 56 секунд

    смотря как организован код, если создаётся объект $user, со своими данными, то да, это лажа.
    у меня объекта не создается, и $USER->del($id) на самом деле - обычный метот класса. никакой объект не удаляет себя сам, об этом тут уже где-то писалось, кстати :)
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 3 мая 2008 г. 15:34, спустя 4 минуты 22 секунды

    о мне тока что пришла в голову идея унифицированого интерфкейса


    interface adminable {
    public function add();
    public function edit();
    public function del();
    }



    class user implements adminable {
    public function setAdmin($admin){
    }
    public function del(){
    $admin->delet($this)
    }


    типа инверсия зависимости с сеттер инжекшн


    Но от темы мы отошли капетально, что всетаки лучше?
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 3 мая 2008 г. 15:34, спустя 49 секунд

    ну и юзер - конечно не самый подходящий пример произвольного класса), т.к это клас несколько специфичен
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 3 мая 2008 г. 15:36, спустя 1 минуту 15 секунд

    да плохой пример вышел, но ниче зато пища для подумать)))
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 3 мая 2008 г. 15:36, спустя 28 секунд

    $admin->delet($this)
    ??
    я чего-то непонимаю?
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 3 мая 2008 г. 15:40, спустя 3 минуты 33 секунды

    нет почему же для инверсии зависимостей помоему самое то…
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 3 мая 2008 г. 15:52, спустя 12 минут 46 секунд

    а, лучше, пардон..
    имхо не пихать все акшины в один файл..
    большой свич - это в итоге каша вместо кода..
  • Ёлочник

    Сообщения: 25 Репутация: N Группа: Кто попало

    Spritz 6 мая 2008 г. 14:33, спустя 2 дня 22 часа 40 минут

    мне кажется лучше всё хранить по файлам, потому-что, считай этот тоже switch, но загружается именно тот код который нужен "сейчас", если нужно будет что-то изменить, то сразу знаешь где искать, и в дальнейшем простой код может разрастись до непростого (например не просто удаление строки из БД, а проверка права на удаление, удаление связанных записей (фотки, записи и т.п)).
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 6 мая 2008 г. 16:34, спустя 2 часа 54 секунды

    Лично мнe switch удобней использовать. Если разбивать по файлам, то нельзя писать просто file = "path/to/file/".$_GET['action'].".php";, приходится вставлять лишние проверки… Зачем?
  • Ёлочник

    Сообщения: 25 Репутация: N Группа: Кто попало

    Spritz 6 мая 2008 г. 17:19, спустя 45 минут 30 секунд


    Лично мнe switch удобней использовать. Если разбивать по файлам, то нельзя писать просто file = "path/to/file/".$_GET['action'].".php";, приходится вставлять лишние проверки… Зачем?


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

    Сообщения: 25 Репутация: N Группа: Кто попало

    Spritz 6 мая 2008 г. 17:36, спустя 17 минут 4 секунды

    Кстати, про безопасность (у меня последнее время фобия =)).


    file = "path/to/file/".$_GET['action'].".php"; - грубая ошибка, дыра в безопасности..


    Не пойму какая тут дыра в безопасности? Путь к файлу ведь указан, он либо будет подключён либо нет, как тут можно навредить?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!