Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) 1 [2]  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Доступность методов класса в новом объекте, Доступность методов класса в новом объекте внутри класса
SlavaFr  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1535
Пользователь №: 22453
На форуме: 6 лет, 6 месяцев, 6 дней
Карма: 104




Цитата (Guest @ 5.07.2016 - 19:48)
Мокает всё, включая нативные php функции.

Спасобо за ссылочку. Там вроде не написано, про нативные функции, но то, чтро он делает мок статических методов это круто, так как PHPUnit это не может.
С Codeception и selenium тестами приходилось работать, но из за сложности библиотеки я перешел на ПХПюнит с дреиверами от behad для функтиональных тестов.


--------------------
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
SlavaFr  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1535
Пользователь №: 22453
На форуме: 6 лет, 6 месяцев, 6 дней
Карма: 104




Цитата (chee @ 5.07.2016 - 18:16)
Через наследованияе. К примеру, есть тип, наследуешь, изменяешь метод, получаешь тот же тип, а потом через композицию можешь подставить его в рантайме с помощью фабрик и контейнеров.


Тип просто переносится в интерфейс. Безусловно нужен рефакторинг.
К примеру у тебя был класс А и Б

class A
{
public function a() {return 'a';}
}


class B extends A
{
public function b() {return $this->a().'b';}
}



Ты выносиш А в интерфейс и таким образом передаёшь в будующем как параметр не не класс, а интерфейс как тип. Рефакторинг выглядит таким образом:

interface A {
/**
*
@return string
*/

public function a();
}
class Aimpl implements A
{
public function a() {return 'a';}
}


class B implements A
{
/**
*
@var A
*/

private $aInst;

public function __construct(A $a) { $this->aInst = $a; }
public function a() {return $this->aInst->a();}
public function b() {return $this->a().'b';}
}


$a = new Aimpl;
$b = new B($a);
echo $b->b(). PHP_EOL;

// или даже так
echo (new B($b))->b();

То есть и тип имеется и парент А можно заменять любыми имплементациями, и эти имплементации мугут тестироваться отдельно.


--------------------
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 4 дня
Карма: 40




SlavaFr, помоему это усложнение
Цитата (SlavaFr @ 7.07.2016 - 11:32)
То есть и тип имеется и парент А можно заменять любыми имплементациями, и эти имплементации мугут тестироваться отдельно.

Бесмысленный аргумент, избегать наследование там где оно нужно, городить надстройки из врапперов, делигирования для того что бы удобно было писать тесты. Я не против качественно композиции, но там где она нужна, а не там где замена ради демонтажа наследования в угоду тестированию


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
SlavaFr  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1535
Пользователь №: 22453
На форуме: 6 лет, 6 месяцев, 6 дней
Карма: 104




Цитата (chee @ 7.07.2016 - 17:53)
SlavaFr, помоему это усложнение
Цитата (SlavaFr @ 7.07.2016 - 11:32)
То есть и тип имеется и парент А можно заменять любыми имплементациями, и эти имплементации мугут тестироваться отдельно.

Бесмысленный аргумент, избегать наследование там где оно нужно, городить надстройки из врапперов, делигирования для того что бы удобно было писать тесты. Я не против качественно композиции, но там где она нужна, а не там где замена ради демонтажа наследования в угоду тестированию

1) наследование не кто не отменил и если в конкретном случае не каких последующих имплементаций не предвидется, как например в контроллер-классах, которые наследуют от главного контроллера композиция не требуется, как и не требуется в run time подменять родителя.
2) Композиция имеет смысл когда не исключена замена парент-класса. Если тебе это не нужно, то это не значит, что это не пригодится другим.
3) Тестирование является показателем качества кода, при чём замеряемым в coverage. Если тебе придётся продавать тваю работу не клиенту желающему сделать блог, а для серьёзных software-фирм, то программироаание во имя лучшего тестирования продвкта приобретает настоящий смысл. Может быть после вопроса Software-Архитектора, почему во преки CCD принципов было отдано предпочтение наследованию, а не композиции, то отговорка, что во имя тестов тебе показалось это не нужным, то придётся или переделовать, или смириться с тем, что другие посчитали, что у тебя "есть потенциал для улучшения".
4) Композиция не является обязательством, а является всего лишь методом, который считается более гибким. По этому я не говорю, что она обязана быть, а всего лишь говорю, что она предпочтительней.

С уважением.


--------------------
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 4 дня
Карма: 40




SlavaFr, то есть смысла во фразе - нет, так как есть оговорки для её примения.

По поводу тестирования, ты конечно прав, но тестирование это удел или опен-сорса, или компаний с выведеным (и приносящим деньги) на рынок продуктом, композиция или наследование это уже последний вопрос в этом деле.


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) 1 [2]  Ответ в темуСоздание новой темыСоздание опроса