
Sergey
25.02.2017
18:38:57
покрой важные штуки тестами
100% покрытие не нужно

Evgeniy
25.02.2017
18:39:20
важный вопрос code coverage

Google

f4rt~
25.02.2017
18:39:23
10%
конечно, я же сужу с своей колокольни, у меня опыта не так много;

Evgeniy
25.02.2017
18:39:28
должен ли он быть 100%

Sergey
25.02.2017
18:39:40

Evgeniy
25.02.2017
18:39:41
и дает ли он гарантию что при наличие 100% проблем не будет ?)

Sergey
25.02.2017
18:39:55

Evgeniy
25.02.2017
18:40:04
я к этому и клонил)

Sergey
25.02.2017
18:40:24
НО, покрытие кода может давать тебе представление о том что покрыто а что нет
ну то есть 100% не нужно, но хотя бы 80-90 стремиться стоит

Evgeniy
25.02.2017
18:41:27
поэтому понимание этих метрик приходит с опытом
и зависит от проекта или заказчиков

Sergey
25.02.2017
18:41:53
ну в целом от уровня страха

Google

Evgeniy
25.02.2017
18:41:56
ну и оплаты)

Sergey
25.02.2017
18:42:01
если тебе сыкатно лесть в этот модуль - значит мало тестов
если не сыкатно - значит норм
не ну есть конечно психи которым никогда не сыкатно
для них можно другую метрику брать - количество регрессиий после их "да не страшно тут поправить"

Evgeniy
25.02.2017
18:43:00
ладно срач хорош пойду доку делать )

Sergey
25.02.2017
18:43:12
пойду тесты писать

Evgeniy
25.02.2017
18:43:23
кстате
посмотреть либу снова нет желания ?
по psr/container implementation ?

Sergey
25.02.2017
18:43:46
не
)

Evgeniy
25.02.2017
18:43:54
ок
:D
я сделал лучше)

Sergey
25.02.2017
18:44:18
верю но с этим срачем я исчерпал свой лимит на "потрынденть"

Evgeniy
25.02.2017
18:44:27
ок

f4rt~
25.02.2017
18:44:40
круто когда ты самоорганизованный, наверное

Sergey
25.02.2017
18:45:54
наверное)
но это не про меня)

Google

f4rt~
25.02.2017
18:46:20
значит не про меня и подавно)

Чарлей
25.02.2017
19:49:09
https://t.me/socionika_alignment вот чат. заходите. все без бан и прочего

Evgeniy
25.02.2017
19:51:00
зачем? )

f4rt~
25.02.2017
19:58:54
жалко я ливал и у меня права снялись

F01134H
25.02.2017
20:00:12
шо за пиздец вася)

Aleh
26.02.2017
08:24:57
@fes0r @f3ath потрите может спам?

Paul
26.02.2017
08:29:34
Может они заинтересованы в нём )

Aleh
26.02.2017
08:30:13
весь этот чатик нужен был только ради того, чтобы пропиарить какую-то слабенькую флудилку)

Paul
26.02.2017
08:30:41

?
26.02.2017
08:31:14

Sergei
26.02.2017
08:31:22
@f3ath @fes0r 4 messages deleted, reason: spam

Aleh
26.02.2017
08:32:04
Нет, банальная коммерция
да ну, мы ж тут простите в it, зарабатываем(те кто в снг) в разы больше средней. Минута работы будет дороже такой коммерции)
Sergei @f3ath в линки групп можно добавить @frp_ru

Sergei
26.02.2017
08:33:42
эээээ я дальше "удалить сообщение со спамом" не обучен

Aleh
26.02.2017
08:34:09
видимо это только коняка может, как владелец

Sergei
26.02.2017
08:34:19
вероятно
давайте призовем

Aleh
26.02.2017
08:34:53
@ployd а ты где еще сидишь? вроде в чатике ноды тебя видел, а в frp не видел

Paul
26.02.2017
08:35:47

Google

Paul
26.02.2017
08:35:58
frp это про реактивщину?

Aleh
26.02.2017
08:36:12
там в основном про ramda в js )

Paul
26.02.2017
08:36:20
Ну, хоть что-то

da horsie
26.02.2017
19:23:27

Sergey
27.02.2017
12:41:54
давайте срач по LSP
<?php
class Order
{
protected $items = [];
public function addItem(Item $item)
{
$this->items[] = $item;
}
public function getItems()
{
return $this->items;
}
}
class FreeOrder extends Order
{
public function addItem(Item $item)
{
if ($item->price() !== 0) {
throw new Exception();
}
$this->items[] = $item;
}
}
class OrderCollector
{
public function сollect(Order $order, $items)
{
foreach ($items as $item) {
$order->addItem($item);
}
}
}
FreeOrder нарушает LSP тем что бросает эксепшен и тем самым делает "неожиданные" вещи, или это ок?

Denis
27.02.2017
13:03:15
Так методы разные
Или я туплю?)

Admin
ERROR: S client not available

Dimitriy
27.02.2017
13:03:50
это унаследованный метод, там вообще вызов к паренту должен быть

Denis
27.02.2017
13:04:10
тьфу)

Aleh
27.02.2017
13:06:41

Сергей
27.02.2017
13:06:58

Sergey
27.02.2017
13:07:16
код не сложный, можно и без гиста прочитать)

Aleh
27.02.2017
13:07:24

Sergey
27.02.2017
13:07:26

Aleh
27.02.2017
13:07:58
чем нарушает?
ты же и описал, вместо ожидаемого добавления пользователю Order произойдет exception

Dimitriy
27.02.2017
13:08:00
не обязательно
ну необязательно, если имплементация принципиально отличается
а если идёт повторение кода, надо парента дёргать вместо того чтобы код дуплицировать

Google

Dimitriy
27.02.2017
13:08:30
в большинстве случаев

Sergey
27.02.2017
13:08:35
окей. в принципе сказано о подтипах определенного типа. интерфейсы как известно являются типами так вот теперь если мы уберем наследование и сделаем с интерфейсами, мы по прежнему нарушаем LSP?) @mkusher
<?php
class OrderInterface
{
public function addItem(Item $item);
public function getItems();
}
class Order implements OrderInterface
{
protected $items = [];
public function addItem(Item $item)
{
$this->items[] = $item;
}
public function getItems()
{
return $this->items;
}
}
class FreeOrder implements OrderInterface
{
public function addItem(Item $item)
{
if ($item->price() !== 0) {
throw new Exception();
}
$this->items[] = $item;
}
public function getItems()
{
return $this->items;
}
}
и если мы в первом варианте заменить эксепшен на return?

Aleh
27.02.2017
13:20:18

Sergey
27.02.2017
13:20:56
интерефейс не определяет никаких эксепшенов. точно так же как и в переопределенном методе нигде не описаны эксепшены

Aleh
27.02.2017
13:22:42
банальный пример
interface List<T> {
add(item: T): void;
remove(item: T): void;
has(item: T): void;
length(): number;
}
банальный примеры контракта, которые в типе описать нельзя здесь:
list.add(a);
expect(list.has(a)).to.be.true;
или
list.add(a);
expect(list.length()).to.be(1);
тогда некий class DoubleList который делает вместо add
add(item: T) { this.internal.push(item); this.internal.push(item); }
нарушит этот контракт, потому что длина изменилась не на один, а на два
потому весь вопрос в том, чего ты от интерфейса ждешь)
поэтому в случае наследования классов мы явно видим нарушение, в случае интерфейсов надо будет смотреть еще спеку того, как взаимодействует твой код с этим интерфейсом и чего от него ожидает
ну как-то так

Sergey
27.02.2017
13:31:04
ну со спекой притянуто за уши

Aleh
27.02.2017
13:31:25
?
спека это необязательно код phpspec или чего-то еще, findUsages в шторме тоже в каком-то смысле составляет спеку)

Sergey
27.02.2017
13:32:01
у меня может быть интерфейс для кеша, и реализации типа Void, Array, Memcached

Aleh
27.02.2017
13:32:28
думаю да, может быть

Sergey
27.02.2017
13:33:07
и закрывать глаза на разные имплементации интерфейса

Aleh
27.02.2017
13:33:23
ничего не понял
в смысле