ThinkPHP #6: Usability кода

ThinkPHP #6: Usability кода

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

4769e8ad10f8a1d453dd6e59ecdbcbe4?s=128

thinkphp_com_ua

March 22, 2013
Tweet

Transcript

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

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

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

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

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

    понятно $file = Application::getInstance()->getRequest()->getFiles()->get($filename); // синглтооооон? иди учи патерны... $file = Request::getFile($filename);
  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; } } }
  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' ); } }
  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; }
  9. Примеры из жизни /** * 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 )); }
  10. DI и подобие // можем же, мляяяять $bootstrap = $application->getBootstrap();

    $bootstrap->bootstrap('db'); $dbAdapter = $bootstrap->getResource('db'); $dbAdapter->getConnection()->exec($dataSql); // но как-то сподручнее $application->getDb()->exec($dataSql);
  11. MVC + custom routers Включите GPS!!!

  12. Структура папок \ application \ modules \ users \ views

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

    30 методов в классе? • десяток ветвлений? • ...?
  14. Делаем выводы • Поругал ZF/WP/Symfony • Поругал невнятные MVC •

    Похвалил jQuery • Ещё раз засветил Bluz
  15. спасибо