Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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. Как достичь желаемого? • соблюдать стандарты кодирования • избегать избыточности

    в коде • писать комментарии для людей • писать комментарии для IDE
  2. Что получим? • Увеличим скорость разработки • Уменьшим количество ошибок

    • Уменьшим время на локализацию ошибок • Попробуем повторно использовать код
  3. Примеры Следуем принципу KISS: // как круто, ёпты, всё ж

    понятно $file = Application::getInstance()->getRequest()->getFiles()->get($filename); // синглтооооон? иди учи патерны... $file = Request::getFile($filename);
  4. Примеры из 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; } } }
  5. Пример из 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' ); } }
  6. Примеры из жизни // подними руку если писал такой код

    $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; }
  7. Примеры из жизни /** * Check-in user location to DB

    * * <code>Location::checkinUser($User, 2.123654, 0.456321)</code> * * @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 )); }
  8. DI и подобие // можем же, мляяяять $bootstrap = $application->getBootstrap();

    $bootstrap->bootstrap('db'); $dbAdapter = $bootstrap->getResource('db'); $dbAdapter->getConnection()->exec($dataSql); // но как-то сподручнее $application->getDb()->exec($dataSql);
  9. Структура папок \ application \ modules \ users \ views

    \ scripts \ index |- index.phtml ` profile.phtml
  10. Вменяемость кода • 2 000 строк кода в файле? •

    30 методов в классе? • десяток ветвлений? • ...?