Caching on highload Drupal site - Alexander ShumenkoDrupalCampDN
Рассмотрим создание тегированной системы кеширования сущностей для high load сайта на Drupal. В ходе доклада будут рассмотрены наиболее интересные моменты реализации (построение цепочки тегов) так же рассмотрены проблемы и способы их решения.
MySQL replication from setup to advanced features. Hidden MySQL replication o...Pivorak MeetUp
MySQL replication from setup to advanced features. Hidden MySQL replication opportunities for developers by Serge Tyatin during 11th #pivorak Lviv Ruby MeetUp.
Caching on highload Drupal site - Alexander ShumenkoDrupalCampDN
Рассмотрим создание тегированной системы кеширования сущностей для high load сайта на Drupal. В ходе доклада будут рассмотрены наиболее интересные моменты реализации (построение цепочки тегов) так же рассмотрены проблемы и способы их решения.
MySQL replication from setup to advanced features. Hidden MySQL replication o...Pivorak MeetUp
MySQL replication from setup to advanced features. Hidden MySQL replication opportunities for developers by Serge Tyatin during 11th #pivorak Lviv Ruby MeetUp.
Практические основы тестирования на php Unit-test: понятия, тонкости, пути решения, вопросы для проработки.
PHPUnittest fast start
Разработано http://webgloss.ru
Организация работы с API на Vue.js, Виталий КопачёвMail.ru Group
В процессе работы из проекта в проект я тащу свой «велосипед», постоянного его подтачиваю или модифицирую под конкретные нужды. Хотел бы рассказать о нем, его плюсах и минусах. Кроме этого, поговорим о том, какие «велосипеды» для работы с API существуют.
Практические основы тестирования на php Unit-test: понятия, тонкости, пути решения, вопросы для проработки.
PHPUnittest fast start
Разработано http://webgloss.ru
Организация работы с API на Vue.js, Виталий КопачёвMail.ru Group
В процессе работы из проекта в проект я тащу свой «велосипед», постоянного его подтачиваю или модифицирую под конкретные нужды. Хотел бы рассказать о нем, его плюсах и минусах. Кроме этого, поговорим о том, какие «велосипеды» для работы с API существуют.
Использование юнит-тестов для повышения качества разработкиvictor-yastrebov
В докладе рассмотрены подходы к созданию надежных юнит-тестов, которые просты в поддержке и модернизации, а также принципы создания кода пригодного для покрытия автотестами. Приведены два способа внедрения зависимости: с использованием конструктора тестируемого объекта, а также с использованием подхода "выделить и переопределить". Каждый из способов разобран на примере, демонстрирующем особенности его реализации и применения. Приведен ряд практических советов, нацеленных на создание надежных юнит-тестов. Использование на практике приведенных подходов и принципов позволяет упростить процесс поддержки и модификации существующего кода, а также дает уверенность в надежности работы добавляемого нового функционала. В конечном итоге это приводит к повышению качества разрабатываемого продукта.
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеAlexander Byndyu
В докладе рассматривается использование популярных фреймворков в разработке ASP.NET MVC приложения, как сделать его наиболее гибким. Будет затронута тема минимизации дублирования и повторное использование кода, применение методов метапрограммирования отображений; уменьшение логики в контроллерах; применение принципов SOLID и GRASP для разработки доменной модели приложения.
По материалам конференции .NET разработчиков http://www.dotnetconf.ru/Materialy/Asp_net_mvc_kak_postroit_gibkoe_web_prilozenie
За пределами PageObject, Дмитрий Жарий
Есть ли необходимость в использовании объектно-ориентированного подхода в автоматизации тестирования? Нужно ли нам экономить исходный код, или лучше скопировать, вставить и подправить? Что лучше, “сложное” ООП или простые “дубовые” тесты. Ответ зависит от Вашего проекта автоматизации и от дальнейших планов его развития. Если Вы планируете остановится на десятке тестов, то в таком случае в “более сложных практиках” необходимости нет. Если же Вы планируете долгосрочное развитие фреймворка автоматизации, то задуматься о правильной архитекторе и будущем росте необходимо уже прямо сейчас.
В своем докладе Дмитрий расскажет, как очень несложные практики ООП помогут сделать код еще проще и понятней. И поверьте, в хорошем коде может разобраться любой человек, а горы “вечно падающего копи-паста” будут просто ненавидеть. Также Дмитрий расскажет о том, как Автоматизация может тестировать сама себя при помощи легких UI тестов перед тем, как запустить более тяжелые функциональные тесты и сценарии. Он покажет, как написав код тестового набора всего лишь один раз, применить его для каждой страницы отдельно. Примеры кода к докладу будут на C#/.NET. Но, любую такую практику можно реализовать на любом общеизвестном и популярном языке программирования.
Рarse'им бэкенд
Аким Халилов
Вы хотите выучить Backbone? Хотите просто писать клиентский код, не думая о сервере и о том, как все обрабатывать, хранить, бэкапить? Выход есть – храните с помощью Parse. Parse – платформа, которая предоставляет возможность хранения данных без забот о сервере. Хранилище данных, соц. сети, push-notification, cloud code. Что такое Parse и что он умеет, о библиотеке для использования:
- знакомство с JS API и примеры использования;
- начинаем кодить: stub-проект;
- кодим фичи: CRUD + плюшки;
- хостим.
Доклад с WordCamp Moscow 2017 посвящен распространенным ошибкам у разработчиков плагинов и тем в WordPress. Советы и рекомендации, как можно сделать свой продукт лучше и удобнее для пользователей и разработчиков.
3. План
1)Как плохо без Dependency Injection
2)Как хорошо с Dependency Injection
3)Как плохо с Dependency Injection
4)Как хорошо с Phemto
5)Как хорошо :)
VETMANAGER TEAM 26.4.12 Стр. 3
4. Как плохо
class Stores {
function add($data){
$query = 'INSERT INTO stores SET title=?
, assigned_user_id=?, type=?';
NDatabase::query($query, array($data['title']
, $data['assigned_user_id'], $data['type_id']));
}
Stores::add
VETMANAGER TEAM 26.4.12 Стр. 4
5. Как плохо
Как тестировать?(никак)
Как работать с несколькими коннектами? (никак)
Как подменить СУБД?(кое-как)
Как использовать в другом проекте?(кое-как)
Как перейти на NoSQL?(никак)
VETMANAGER TEAM 26.4.12 Стр. 5
6. Делаем инъекцию
class Stores{
public function __construct($database) {
}
function add($data){
$query = 'INSERT INTO stores SET title=?
, assigned_user_id=?, type=?';
$this->_database
->query($query, $data);
}
VETMANAGER TEAM 26.4.12 Стр. 6
7. Лучше
Как тестировать?(легко)
Как работать с несколькими коннектами? (легко)
Как подменить СУБД?(легче)
Как использовать в другом проекте?(легче)
Как перейти на NoSQL?(никак)
VETMANAGER TEAM 26.4.12 Стр. 7
8. Пишем тест...
class StoresTest extends
PHPUnit_Framework_TestCase
{
function setUp(){
$this->dbMock = $this
->getMock('VMDatabase');
$this->testObject =
new Stores($this->dbMock
}
VETMANAGER TEAM 26.4.12 Стр. 8
10. Как плохо с DI
$stores = new Stores(new VMDatabase());
$stores = new Stores(
new VMDatabase()
, new VMRequest()
, new VMSession()
, new UserModel()
…
);
VETMANAGER TEAM 26.4.12 Стр. 10
11. Как хорошо с Phemto
public function __construct(VMDatabase $database) {
$this->_database = $database;
}
require_once 'phemto/phemto.php';
$injector = new Phemto();
$stores = $injector->create('Stores');
VETMANAGER TEAM 26.4.12 Стр. 11
12. Как хорошо с Phemto2
public function __construct($database) {
$this->_database = $database;
}
require_once 'phemto/phemto.php';
$injector = new Phemto();
$injector->forVariable('database')
->willUse(new Reused('VMDatabase'));
$stores = $injector->create('Stores');
VETMANAGER TEAM 26.4.12 Стр. 12
13. Лучше
Как тестировать?(легко)
Как работать с несколькими коннектами? (легко)
Как подменить СУБД?(легче)
Как использовать в другом проекте?(легче)
Как перейти на NoSQL?(никак)
VETMANAGER TEAM 26.4.12 Стр. 13
14. ActiveRecord
class Stores {
function dataWrap($data){...}
protected function getEntity(){...}
function add($data){
$entity = $this->getEntity();
$entity->import($this->dataWrap($data));
$entity->save();
}
VETMANAGER TEAM 26.4.12 Стр. 14
15. Лучше?(getEntity)
Как тестировать?(???)
Как работать с несколькими коннектами?(???)
Как подменить СУБД?(легко)
Как использовать в другом проекте?(???)
Как перейти на NoSQL?(легко)
VETMANAGER TEAM 26.4.12 Стр. 15
16. Стальной getEntity
protected function getEntity(){
$entity = new StoresRow();
return $entity;
}
VETMANAGER TEAM 26.4.12 Стр. 16
17. Фабричный getEntity
protected function getEntity(){
return $this->factory->create('StoresRow');
}
Тест
$ourMock = $this->getMock('StoresRow');
$factoryMock = $this->expects($this->once())
->method('create')
->will($this->returnValue($ourMock))
VETMANAGER TEAM 26.4.12 Стр. 17
18. getEntity
protected function getEntity(){
return $this->_entity;
}
VETMANAGER TEAM 26.4.12 Стр. 18
19. Новый Stores
class Stores {
public function __construct($entity) {
$this->_entity = $entity;
}
$injector->whenCreating('Stores')
->forVariable('entity')
->willUse('StoresRow');
VETMANAGER TEAM 26.4.12 Стр. 19
20. Новый тест Stores
$this->entityMock->expects($this->once())
->method('import')
->with($this->equalTo($needParam));
$this->entityMock->expects($this->once())
->method('save');
$this->testObject->add($testData);
VETMANAGER TEAM 26.4.12 Стр. 20
21. Наш ActiveRecord
class StoresRow extends Entity {
protected $_fields = array ();
protected $_table = 'stores';
public function __construct($database) {
$this->setDB($database);
}
VETMANAGER TEAM 26.4.12 Стр. 21
22. Тест ActiveRecord
function testSaveWithoutId(){
$this->dbMock->expects($this->once())
->method('query')
->with($this->stringContains("INSERT"));
$this->testObject->import($testData);
$this->testObject->save();
}
VETMANAGER TEAM 26.4.12 Стр. 22
23. Phemto итог
#wiring.php
require_once 'phemto/phemto.php';
$injector = new Phemto();
$injector->forVariable('database')
->willUse(new Reused('VMDatabase'));
$injector->whenCreating('Stores')
->forVariable('entity')->willUse('StoresRow');
return $injector;
#ajax_store.php
$injector = include 'wiring.php';
$stores = $injector->create('Stores');
VETMANAGER TEAM 26.4.12 Стр. 23
24. Лучше
Как тестировать?(легко)
Как работать с несколькими коннектами? (легко)
Как подменить СУБД?(легко)
Как использовать в другом проекте?(легко)
Как перейти на NoSQL?(легко)
VETMANAGER TEAM 26.4.12 Стр. 24