
Sergey
22.11.2016
11:19:21
ну мол у нас процессы выстроены таким образом, что мы сначала прописываем полностью как должно работать и уже потом делаем)

Sergey
22.11.2016
11:20:00
бывают очень сложные кейсы что сразу и не сообразишь

Sergey
22.11.2016
11:20:09
и у меня уже который месяц батхертит от бизнес аналитиков которые не могли договорится кто за что отвечает. В итоге они приняли офигительно крутую идею. Один отвечает за функционал мобильной апы, а другой за админку. И в итоге большая часть функционала, которая на самом деле затрагивает и то и то, выходит с конфликтами

Google

Sergey
22.11.2016
11:20:35

Sergey
22.11.2016
11:20:58
ну и плюс типичный проект который скатывается в болото где решения принимаются по факту появления проблем и потом через месяц уже забывают что такое было и оформляют это как багу)

Sergey
22.11.2016
11:21:11
)

Sergey
22.11.2016
11:21:18
пока из кода не достанешь коммит и привязанный к нему тикет откуда пришло "это"

Sergey
22.11.2016
11:21:34
хорошо если разработчик еще глянет гит блэйм
а то бывает тупо выкашивают то что нужно было

Sergey
22.11.2016
11:22:37
это другая проблема.. когда 1 разработчик в курсе что тут происходит и примерно контролирует все входящие требования, а другие разрабы слабо в этом разбираются и их направляют запилить какую-то "небольшую правку", которая нихрена не вписывается и ломает к чертям все

Sergey
22.11.2016
11:25:38
есть такое

Nick
22.11.2016
17:11:26
@fes0r почему наследование = рак?
часто прослеживаю последнее время такое мнение.

Roman
22.11.2016
18:39:52
https://habrahabr.ru/post/177447/

Ilya
22.11.2016
18:56:03
приходится раковать - общий класс с методом-оберткой + классы для использования внутри с реализациями

Google

Ilya
22.11.2016
18:58:01
люто не люблю так делать, но приходится
либо массив пихать
тогда сидишь без тайпхинтинга

Nick
22.11.2016
19:28:02
Перегрузка методов - этож
Class User
{
public function getFullName(){ return 'atata';}
}
Class AwesomeUser extends User
{
public function getFullName(){ return 'awesome atata';}
}
что с ней не так?
https://habrahabr.ru/post/177447/
спасиб, почитаю

Roman
22.11.2016
19:31:23
перегрузка метода - это когда в метод передается разное количество переменных или разные их типы или и то и другое
и в зависимости от этих условий, в методе выполняется то или иное действие

Nick
22.11.2016
19:32:16
значит напутал, буду курить

Roman
22.11.2016
19:32:55
как тут view сделать для кода?

Nick
22.11.2016
19:33:10
`
короче три апострофа
и в конце три апострофа
вначале и вконце листинга

Roman
22.11.2016
19:34:14
class test
{
//todo smt
}
спс

Sergey
23.11.2016
07:44:14
в целом наследование типов - норм (если юзать implements мол), а вот наследование классов в 90% случаев не нужно и оверюзится.
делаем все классы final и если надо вводить абстрактные типы - интерфейсы

Google

Ilya
23.11.2016
07:47:28
>надо всего-лишь в теле метода сделать if
а если у тебя 12 вариантов?
12 if?

Sergey
23.11.2016
07:48:09
А у тебя может быть 12 вариантов?)
ну мол приведи мне кейс, когда у тебя может быть 12 вариантов
или хотя бы 5
да че уж, хотя бы 3
есть классический пример с принтерами и фигурами, где нужно что-то типа double dispatch + перегрузка методов
но опять же вся проблема с перегрузкой методов, у тебя либо всегда должен быть статический набор аргументов (что бы интерпритатор ругался когда ты вызываешь функцию и передаешь лишние аргументы), либо у тебя не может быть перегрузки методов.
ломать пых что бы вводить весьма сомнительную фичу, которую и так можно реализовать, никто не будет.

Ilya
23.11.2016
07:51:59
да че уж, хотя бы 3
любая внешняя либа где тупой автор додумался завязаться на конкретном классе в методе
laravel eloquent

Ilya
23.11.2016
07:52:22
самый последний случай

Sergey
23.11.2016
07:52:53
> где тупой автор
давай не будем рассматривать ситуации где кто-то тупой

Ilya
23.11.2016
07:53:03
а они все такие

Sergey
23.11.2016
07:53:04
ты всегда все можешь завернуть в свои объекты со своими интерфейсами
а они все такие
ну как бы язык программирования тут не поможет) и фичи тоже)

Ilya
23.11.2016
07:53:29
так у меня уже eloquent завернут в мои объекты
но его-то надо расширять

Sergey
23.11.2016
07:53:41
кого "его"?

Google

Sergey
23.11.2016
07:53:45
элоквент? зачем?
ну и что значит "расширять" в твоем понимании

Ilya
23.11.2016
07:54:59
грамматику свою добавлять

Sergey
23.11.2016
07:55:22
> грамматику свою добавлять
я не в теме, это как?

Ilya
23.11.2016
07:55:31
ну типа drop cascade в либе нету
для postgres очень полезная фича

Sergey
23.11.2016
07:55:41
ээм...
и... причем тут перегрузка методов?)

Admin
ERROR: S client not available

Ilya
23.11.2016
07:56:03
а ща покажу

Sergey
23.11.2016
07:56:25
а вообще вместо того что бы делать эти вещи через eloquent и расширять его, сделал бы table gateway и не парился бы
и юзал бы dbal + sql
интересно стало)

Ilya
23.11.2016
07:57:41
воо, соседний пример в коде нашел
есть в eloquent distinct
/**
* Force the query to only return distinct results.
*
* @return $this
*/
public function distinct()
{
$this->distinct = true;
return $this;
}

Sergey
23.11.2016
07:58:30
ну то есть ты решил понаследовать классы)
для "расширения"

Ilya
23.11.2016
07:58:49
который в select обрабатывается очень примитивно

Google

Ilya
23.11.2016
07:58:54
/**
* Compile an aggregated select clause.
*
* @param \Illuminate\Database\Query\Builder $query
* @param array $aggregate
* @return string
*/
protected function compileAggregate(Builder $query, $aggregate)
{
$column = $this->columnize($aggregate['columns']);
// If the query has a "distinct" constraint and we're not asking for all columns
// we need to prepend "distinct" onto the column name so that the query takes
// it into account when it performs the aggregating operations on the data.
if ($query->distinct && $column !== '*') {
$column = 'distinct '.$column;
}
return 'select '.$aggregate['function'].'('.$column.') as aggregate';
}

Sergey
23.11.2016
07:59:13
ну ок ладно

Ilya
23.11.2016
07:59:14
а в postgres есть такая штука как distinct on

Sergey
23.11.2016
07:59:19
и причем тут перегрузка методов?

Ilya
23.11.2016
07:59:55
и eloquent не работает когда есть агрегационная функция + distinct

Sergey
23.11.2016
08:00:10
и причем тут перегрузка методов?)

Ilya
23.11.2016
08:00:31
первый случай
/**
* Compile the "select *" portion of the query.
*
* @param Builder $query
* @param array $columns
* @return string|null
*/
protected function compileColumns(Builder $query, $columns)
{
// If the query is actually performing an aggregating select, we will let that
// compiler handle the building of the select clauses, as it will need some
// more syntax that is best handled by that function to keep things neat.
if (!is_null($query->aggregate)) {
return;
}
$select = $query->distinct
? $query->distinctColumns
? 'select distinct on (' . $this->columnize($query->distinctColumns). ') '
: 'select distinct '
: 'select ';
return $select . $this->columnize($columns);
}
моя обработка compileColumns
на самом деле туда приходит MyBuilder $query
который наследуется от Builder
но написать я так не могу
потому что пхп будет ругаться
потому что идиоты завязались не на интерфейсе

Sergey
23.11.2016
08:01:19
а зачем тебе так писать?)

Ilya
23.11.2016
08:01:30
чтобы мои методы подсвечивались в тайпхинтинге
вторая часть
про distinct
/**
* Force the query to only return distinct results.
*
* @return $this
*/
public function distinct()
{
$this->distinct = true;
return $this;
}
пришлось добавлять огород с другой функцией