$30 off During Our Annual Pro Sale. View Details »

ThinkPHP #6: Usability кода

ThinkPHP #6: Usability кода

Как писать код, чтобы не побили

thinkphp_com_ua

March 22, 2013
Tweet

More Decks by thinkphp_com_ua

Other Decks in Programming

Transcript

  1. Usability кода
    Антон Шевчук

    View Slide

  2. А что нам надо?
    Читаемость и
    предсказуемость кода

    View Slide

  3. Как достичь желаемого?
    ● соблюдать стандарты кодирования
    ● избегать избыточности в коде
    ● писать комментарии для людей
    ● писать комментарии для IDE

    View Slide

  4. Что получим?
    ● Увеличим скорость разработки
    ● Уменьшим количество ошибок
    ● Уменьшим время на локализацию ошибок
    ● Попробуем повторно использовать код

    View Slide

  5. Примеры
    Следуем принципу KISS:
    // как круто, ёпты, всё ж понятно
    $file = Application::getInstance()->getRequest()->getFiles()->get($filename);
    // синглтооооон? иди учи патерны...
    $file = Request::getFile($filename);

    View Slide

  6. Примеры из ZF
    public function profileAction()
    {
    // магия тут
    $userId = $this->_getParam('id');
    // и тут
    if (!$userId) {
    $this->_helper->FlashMessenger('User ID is required');
    } else {
    $users = new Users_Model_User_Table();
    if (!$row = $users->getById($id)) {
    $this->_helper->FlashMessenger('User not found);
    } else {
    $this->view->user = $row;
    }
    }
    }

    View Slide

  7. Пример из WP
    function myplugin_menu() {
    if (function_exists('add_management_page')) {
    $page = add_management_page(
    'myplugin',
    'myplugin',
    'manage_options',
    'myplugin_slug',
    'myplugin_admin_page');
    add_action(
    "admin_print_scripts-$page",
    'myplugin_admin_head'
    );
    }
    }

    View Slide

  8. Примеры из жизни
    // подними руку если писал такой код
    $result = isset($_SESSION['id'])?true: isset($_COOKIE
    ['token'])?Auth::checkToken($_COOKIE['token']):
    false;
    // лучше быть проще
    // хоть и кода больше
    if (isset($_SESSION['id'])) {
    $result = true;
    } elseif (isset($_COOKIE['token'])) {
    $result = Auth::checkToken($_COOKIE['token'])
    } else {
    $result = false;
    }

    View Slide

  9. Примеры из жизни
    /**
    * Check-in user location to DB
    *
    * Location::checkinUser($User, 2.123654, 0.456321)
    *
    * @param User $User
    * @param float $lat latitude
    * @param float $long longitude
    * @return bool
    */
    public function checkinUser(User $User, $lat, $long) {
    return Db::insert("checkin", array(
    'userId' => $User->id,
    'lat' => $lat,
    'long' => $long
    ));
    }

    View Slide

  10. DI и подобие
    // можем же, мляяяять
    $bootstrap = $application->getBootstrap();
    $bootstrap->bootstrap('db');
    $dbAdapter = $bootstrap->getResource('db');
    $dbAdapter->getConnection()->exec($dataSql);
    // но как-то сподручнее
    $application->getDb()->exec($dataSql);

    View Slide

  11. MVC + custom routers
    Включите GPS!!!

    View Slide

  12. Структура папок
    \ application
    \ modules
    \ users
    \ views
    \ scripts
    \ index
    |- index.phtml
    ` profile.phtml

    View Slide

  13. Вменяемость кода
    ● 2 000 строк кода в файле?
    ● 30 методов в классе?
    ● десяток ветвлений?
    ● ...?

    View Slide

  14. Делаем выводы
    ● Поругал ZF/WP/Symfony
    ● Поругал невнятные MVC
    ● Похвалил jQuery
    ● Ещё раз засветил Bluz

    View Slide

  15. спасибо

    View Slide