Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Примеры из 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; } } }

Slide 7

Slide 7 text

Пример из 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' ); } }

Slide 8

Slide 8 text

Примеры из жизни // подними руку если писал такой код $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; }

Slide 9

Slide 9 text

Примеры из жизни /** * 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 )); }

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

спасибо