@prophp7

Страница 71 из 1387
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: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
перегрузка метода - это когда в метод передается разное количество переменных или разные их типы или и то и другое
перегрузка методов нужна только в языках со статической системой типов, потому что надо табличку виртуальных методов сделать в момент компиляции. В языках с динамической системой типов и переменным числом аргументов ad-hoc полиморфизм есть из коробки и надо всего-лишь в теле метода сделать if. Ну и надо это обычно не так часто, чаще лучше вооружиться double dispatch и только изредка возникают необходимости проверять типы

в целом наследование типов - норм (если юзать 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; }

пришлось добавлять огород с другой функцией

Страница 71 из 1387