ZFConf 2010: History of e-Shtab.ru

1,188 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,188
On SlideShare
0
From Embeds
0
Number of Embeds
384
Actions
Shares
0
Downloads
30
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

ZFConf 2010: History of e-Shtab.ru

  1. 1. История проекта е-Штаб или юзабилити Zend Framework Анатолий Ларин, веб-разработчик компания e-Legion 27 марта 2010 г. Санкт-Петербург
  2. 2. Немного о e-Shtab <ul><li>Социальная сеть для бизнеса и СМИ. </li></ul><ul><li>  </li></ul><ul><li>Команда: 2,5 человека </li></ul><ul><li>Активная разработка: 4 месяца </li></ul><ul><li>Поддержка: 1 год </li></ul><ul><li>Уникальных посетителей в сутки: 2 000  </li></ul>2 из 16
  3. 3. Юзабилити — это... <ul><li>Learnability </li></ul><ul><li>Efficiency </li></ul><ul><li>Memorability </li></ul><ul><li>Errors </li></ul><ul><li>Satisfaction </li></ul>
  4. 4. Архитектура из 16 MySQL Zend_Db_Table Zend_Db_Row Zend_Db_Select Zend_Application Zend_Controller Zend_Router Smarty Zend_Config Zend_Feed Zend_OpenID Zend_Pagination
  5. 5. <ul><li>Zend Framework — </li></ul><ul><li>это круто! </li></ul><ul><li>Но у него есть проблемы :( </li></ul> из 16
  6. 6. Проблемы <ul><ul><li>PHtml </li></ul></ul><ul><ul><li>XSS в шаблонах </li></ul></ul><ul><ul><li>Unicode и locale </li></ul></ul><ul><ul><li>Notice, Warning вместо Exception </li></ul></ul><ul><ul><li>Сложный к восприятию URL-Router </li></ul></ul><ul><ul><li>Сложность настройки enviroment </li></ul></ul><ul><ul><li>Нет инструментов для консольных задач </li></ul></ul><ul><ul><li>Реиспользуемость </li></ul></ul> из 16
  7. 7. <ul><li>Не очень удобный синтаксис </li></ul><ul><li>Слишком много возможностей </li></ul><ul><li>Верстальщики — не программисты </li></ul>Phtml <?php foreach ($this->books as $key => $val): ?> <tr> <td><?php echo $this->escape($val['author']) ?></td> <td><?php echo $this->escape($val['title']) ?></td> </tr> <?php endforeach; ?> {foreach from=$books item=$val} <tr> <td>{$val.author}</td> <td>{$val.title}</td> </tr> {/foreach} X V из 16
  8. 8. <ul><li>Программисты забывчивы ! </li></ul>XSS в шаблонах X V {$user_entered_data} &lt;script&gt;alert(‘Ha-ha I got your cookies’)&lt;/script&gt; из 16
  9. 9. <ul><li>setlocale(LC_ALL, $appconfig->locale); </li></ul><ul><li>setlocale(LC_NUMERIC, 'en_US', 'en'); </li></ul><ul><li>Zend_Registry::set('locale', new </li></ul><ul><li>Zend_Locale($appconfig->locale)); </li></ul><ul><li>iconv_set_encoding(&quot;internal_encoding&quot;, &quot;UTF-8&quot;); </li></ul><ul><li>iconv_set_encoding(&quot;output_encoding&quot;, &quot;UTF-8&quot;); </li></ul><ul><li>mb_regex_encoding(&quot;UTF-8&quot;); </li></ul><ul><li>mb_internal_encoding(&quot;UTF-8&quot;); </li></ul>Unicode и locale из 16
  10. 10. <ul><li>Мы поняли, что Warning это плохо, когда было написано 80% проекта. </li></ul><ul><ul><li>Notice, Warning вместо Exception </li></ul></ul>V из 16 set_error_handler ( &quot;error_to_exception&quot;, E_ALL );
  11. 11. <ul><li>$router->addRoute( </li></ul><ul><li>'company_edit', </li></ul><ul><li>new Zend_Controller_Router_Route ( </li></ul><ul><li>'/company/:company_id/edit/:submenu', </li></ul><ul><li>array('controller' => 'company', 'action' => 'edit’, </li></ul><ul><li>'submenu'=>'info'), </li></ul><ul><li>array('company_id' => 'd+') </li></ul><ul><li>) </li></ul><ul><li>); </li></ul><ul><li>$router->addRoute( </li></ul><ul><li>'user_profile', </li></ul><ul><li>new Zend_Controller_Router_Route( </li></ul><ul><li>'/user/:id', </li></ul><ul><li>array('controller' => 'user', 'action' => 'profile'), </li></ul><ul><li>array('id' => 'd+') </li></ul><ul><li>) </li></ul><ul><li>); </li></ul><ul><ul><li>Сложный к восприятию URL-Router </li></ul></ul>X из 16
  12. 12. <ul><li>array('adminko/calendar/post(/(?P<holiday_id>d+))?', 'adminko.calendarpost'), </li></ul><ul><li>array('adminko/calendar/post/global(/(?P<event_id>d+))?', 'adminko.calendarpostglobal'), </li></ul><ul><li>array('adminko/poll/add', 'adminko.polladd'), </li></ul><ul><li>array('adminko/poll/(?P<poll_id>d+)', 'adminko.pollone'), </li></ul><ul><li>array('adminko/poll/removequestion/(?P<question_id>d+)?', 'adminko.pollremovequestion'), </li></ul><ul><li>array('adminko/poll/removeanswer/(?P<answer_id>d+)?', 'adminko.pollremoveanswer'), </li></ul><ul><li>array('adminko/poll/(?P<poll_id>d+)/activate', 'adminko.pollactivate'), </li></ul><ul><li>array('adminko/poll/(?P<poll_id>d+)/close', 'adminko.pollclose'), </li></ul><ul><ul><li>Сложный к восприятию URL-Router </li></ul></ul>V из 16
  13. 13. <ul><li>PHP </li></ul><ul><li>Apache </li></ul><ul><li>MySQL </li></ul><ul><li>Smtp server </li></ul><ul><li>Конфигурационные файлы </li></ul><ul><ul><li>Сложность настройки enviroment </li></ul></ul>X V <ul><li>PHP </li></ul> из 16
  14. 14. <ul><li>Разделяем bootstrap, на веб и консольный </li></ul><ul><li>Придумываем структуру директорий </li></ul><ul><ul><li>Нет инструментов для консольных задач </li></ul></ul> из 16
  15. 15. <ul><li>Н е поощряется создание независимых подключаемых модулей </li></ul><ul><li>Нет встроенного механизма сигналов </li></ul><ul><li>Ограниченность возможностей PHP </li></ul><ul><ul><li>Реиспользуемость </li></ul></ul> из 16
  16. 16. ? ! Анатолий Ларин [email_address] http://alarin.blogspot.com @anatoliy_larin из 16

×