Разделы
Теги | RSS © 2008 – 2017
Контакты
email: igor@veselov.sumy.ua
skype: utz0r2
» » » Страница 2

Awesome Laravel - список полезных ресурсов по laravel


Awesome Laravel - список полезных ресурсов по laravel

https://github.com/TimothyDJones/awesome-laravel

14. Коротко ООП PHP - Что осталось


Тестирование - тесты дают уверенность, что ваша программа работает как задумано. Такие тесты можно запускать многократно. Успешное выполнение тестов покажет разработчику, что его изменения не сломали ничего, что ломать не планировалось
Тесты делят на:

приёмочные — проверяют конечный результат, как правило в браузере. Это тесты, которые могут быть выполнены не техническим специалистом. Это может быть ваш тестировщик, менеджер или даже клиент/заказчик
Инструменты аналогичны функциональным

функциональные — проверяют почти то же самое, но на более низком уровне. Зачастую используют эмуляторы браузеров.
Инструменты
Selenium
Mink
Codeception

интеграционные — отдельные модули, комбинируются и тестируются, как группа
Инструменты аналогичны модульным

модульные (юнит) — позволяет удостовериться, что функции, классы и методы работают, как ожидается с момента начала и до конца разработки
Инструменты
SimpleTest
Enhance PHP
PUnit
atoum

Тестирование происходит снизу вверх от модульных и заканчиваются приемочными.

Рефакторинг — это контролируемый процесс улучшения кода, без написания новой функциональности. Результатом рефакторинга является чистый код и простой дизайн
https://refactoring.guru/ru/refactoring

13. Коротко ООП PHP - Пишем фреймверк MVC
















12. Коротко ООП PHP - Примеры


Шаблон фасад
12. Коротко ООП PHP - Примеры
Паттерн фасад определяет интерфейс более высокого уровня, который упрощает использование подсистем.
<?php
class Stringify {

 	public function __construct($str)
 	{
 		$this->str = $str;
 		$this->_AddText();
 		$this->_AddDigits();
 		$this->_AddObject(new Stuff);
 		echo $this->str;
 	}

 	private function _AddText()
 	{
		$this->str .= ' | Adding Text';
 	}

 	private function _AddDigits()
 	{
		$this->str .= ' | Adding Ditgits: 402 ';
 	}

 	private function _AddObject(Stuff $stuff)
 	{
		$this->str .= $stuff->WriteCrap();
 	}

}

class Stuff
{
	public function WriteCrap()
	{
		return __CLASS__ . ' Writing Stuff';
	}
}

new Stringify('Intro Text');

Шаблон декоратор
12. Коротко ООП PHP - Примеры

Сущность работы паттерна декоратор заключается в "оборачивании" готового объекта новым функционалом, при этом весь оригинальный интерфейс объекта остается доступным (декоратор переадресует все запросы объекту).
<?php

class Player
{

	public $Data = array();

	public function __construct(array $info)
	{
		$this->Data = $info;
	}

}

abstract class Player_Decorater
{
	abstract public function Add($int);
}

class Player_Str_Decorate extends Player_Decorater
{
	public function __construct(Player $p)
	{
		$this->Player = $p;
		$this->Player->Data['str'] += 5;
	}
	public function Add($int)
	{
		$this->Player->Data['str'] += $int;
	}
}

class Player_Dex_Decorate extends Player_Decorater
{
	public function __construct(Player $p)
	{
		$this->Player = $p;
		$this->Player->Data['dex'] += 25;
	}
	public function Add($int)
	{
		$this->Player->Data['dex'] += $int;
	}
}

$P = new Player(array('str' => 10, 'dex' => 20));
echo $P->Data['str'];
echo $P->Data['dex'];

echo '<hr/>';

$Str = new Player_Str_Decorate($P);
echo $Str->Player->Data['str'];

$Dex = new Player_Dex_Decorate($P);
$Dex->Add(55);
echo $Dex->Player->Data['dex'];

Цепочка методов
class Cupcake
{

	public $Cupcake = array();

	public function Frosting($str)
	{
		$this->Cupcake['Frosting'] = $str;
		return $this;
	}

	public function Nuts($int)
	{
		$this->Cupcake['Nuts'] = (int)$int;
		return $this;
	}

	public function Sprinkles($int)
	{
		$this->Cupcake['Sprinkles'] = (int)$int;
		return $this;
	}

}

$cupcake = new Cupcake();

$cupcake->Nuts('10')->Frosting('chocolate')->Sprinkles('200');

print_r($cupcake->Cupcake);

11. Коротко ООП PHP - Инструменты


IDE: PhpStorm, Visual Studio Code, Notepad++, Eclipse, Atom, Sublime Text и много других

Composer - менеджер зависимостей для PHP
- Список композер пакетов по популярности: https://packagist.org/explore/popular

PHP Code Similarity Analyzer - инструмент анализа сходства php кода
PHP Code Sniffer - инструмент обнаруживает нарушения определенного набора стандартов кодирования
PHP CS Fixer - инструмент автоматически исправит код под стандарт
PHP Parallel Lint - проверка синтаксиса
PHP Mess Detector - (обнаружитель беспорядков), пытается выявить ошибки, которые не находит компилятор, не оптимальные алгоритмы, переусложнённый код, не используемые выражения и другие подобные проблемы.
PHPLOC - инструмент для быстрого измерения размера и анализируя структуру PHP проекта
PHPDCD - инструмент для определения мертвого кода ( declared функции и методы )
PHPCPD - инструмент для определения дубликатов кода
PHPUnit - фреймворк для юнит тестирования
CodeCeption - фреймвор для тестирования на базе BDD
Security Advisories Checker - инструмент для проверки ваших библиотек на уязвимости
Gulp - сборщик пакетов можно использовать и для php нужд https://www.npmjs.com/search?q=php
phpqa https://github.com/jmolivas/phpqa - библиотека собирающая в кучу большинство из этих инструментов.
XDebug - отладчик позволяет вам отследить исполнение вашего кода и контролировать содержимое вашего стека.

Запуск окружения: virtualbox, vagrant, контейнеры docker, openserver, denver, xampp.

Конечно инструментов намного больше их просто тьма, но тот кто захочет начать этого предостаточно.

10. Коротко ООП PHP - Шаблоны (паттерны) ООП. Типы шаблонов


Любой понимает, что не каждый продавец на рынке, это профессиональный маркетолог или экономист, ему не обязательно знать такие понятия как моржа, амортизация, рои, дисконтирование, прогнозирование и другие умные слова. Но тем не менее он выполняет свою функцию, он продает. Так и с шаблонами, возможно вы их применяли на практике, просто не знали что это шаблон и у него есть название. Шаблоны делят на три ветки и они не привязаны к определенному языку программирования:

Порождающие (Creational) - описывают механизм создания объекта и пытаются создать их в порядке, подходящем к ситуации.
Структурные (Structural) - упрощают проектирование путем выявления простого способа реализовать отношения между субъектами.
Поведенческие (Behavioral) - решают вопросы эффективного и безопасного взаимодействия между объектами.

Порождающие шаблоны
- Abstract Factory (Абстрактная фабрика) - позволяет создавать целые группы взаимосвязанных объектов, которые, будучи созданными одной фабрикой, реализуют общее поведение.
- Builder (Строитель) - используется для отделения процесса конструирования сложного объекта от его представления, так что в результате одного и того же конструирования могут получаться различные объекты. Этот паттерн очень похож на абстрактную фабрику, но в нем акцентируется пошаговое конструирование объекта - в отличие от фабрики, где конструируется семейство классов.
- Factory Method (Фабричный метод) - предоставляет подклассам интерфейс для создания экземпляров некоторого класса.
- Prototype (Прототип) - используется для задания вида создаваемых объектов на основе объекта прототипа, от которого происходит передача внутреннего состояния (создаёт новые объекты путём копирования прототипа).

Структурные шаблоны
- Adapter (Адаптер) - предназначен для организации использования функций объекта, недоступного для модификации, через специально созданный интерфейс.
- Bridge (Мост) - используется для отделения абстракции от ее реализации так, чтобы и то и другое можно было изменять независимо.
- Composite (Компоновщик) - используется для компоновки объектов в древовидные структуры для представления иерархий, позволяя одинаково трактовать индивидуальные и составные объекты.
- Decorator (Декоратор) - используется для динамического расширения функциональности объекта. Является гибкой альтернативой наследованию.
- Facade (Фасад) - представляет собой унифицированный интерфейс вместо набора интерфейсов некоторой подсистемы. Паттерн фасад определяет интерфейс более высокого уровня, который упрощает использование подсистем.
- Flyweight (Приспособленец) - используется для уменьшения затрат при работе с большим количеством мелких объектов.
- Proxy (Прокси) - который предоставляет объект, который контролирует доступ к другому объекту, перехватывая все вызовы (выполняет функцию контейнера).

Поведенческие шаблоны
- Chain of responsibility (Цепочка обязанностей) - служит для ослабления связи между отправителем и получателем запроса. При этом сам по себе запрос может быть произвольным.
- Command (Команда) - представляет собой действие. Объект команды заключает в себе само действие и его параметры.
- Interpreter (Интерпретатор) - решает часто встречающуюся, но подверженную изменениям, задачу.
- Iterator (Итератор) - представляет собой объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого из агрегированных объектов.
- Mediator (Медиатор) - обеспечивает взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга.
- Memento (Хранитель) - позволяет, не нарушая инкапсуляцию, зафиксировать и сохранить внутреннее состояние объекта так, чтобы позднее восстановить его в это состояние.
- Observer (Наблюдатель) - создает механизм у класса, который позволяет получать экземпляру объекта этого класса оповещения от других объектов об изменении их состояния, тем самым наблюдая за ними.
- State (Состояние) - используется в тех случаях, когда во время выполнения программы объект должен менять свое поведение в зависимости от своего состояния.
- Strategy (Стратегия) - предназначен для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости. Это позволяет выбирать алгоритм путем определения соответствующего класса. Шаблон Strategy позволяет менять выбранный алгоритм независимо от объектов-клиентов, которые его используют.
- Template Method (Шаблонный метод) - определяет основу алгоритма и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом.
- Visitor (Посетитель) - описывает операцию, которая должна быть выполнена над каждым объектом из некоторой произвольной структуры.

Подробно о каждом шаблоне с примерами UML диаграммами и тестами, можно прочитать здесь:
https://nixsolutions.github.io/design-patterns/
http://designpatternsphp.readthedocs.io/ru/latest/
https://github.com/kamranahmedse/design-patterns-for-humans
«»
Вверх