@oop_ru

Страница 183 из 785
Aleh
19.04.2017
15:23:09
и там делать save

Sergey
19.04.2017
15:23:16
так ты будешь мапить сущности на ar
не надо мэпить сущности на ar

делается все проще

Aleh
19.04.2017
15:23:29
Google
Sergey
19.04.2017
15:24:33
точнее

class Product { private $data; // ProductModel }

что-то в этом духе

и вот тут Product это уже будет сущность

а ProductModel просто property-bag, стэйт агрегата

ну да... в целом скорее всего понадобиться мэпить

хз

можно делать так

Aleh
19.04.2017
15:28:36
можно не юзать AR

Sergey
19.04.2017
15:29:04
class Product { public function __construct(ProductBuilder $builder) { $this->raise(new ProductAdded(/** data */)); } }

и потом подписываться на ивенты и уже черз ar мэпить)

и ProductAdded можно делать как AR модельку

Aleh
19.04.2017
15:30:16
надо raise как-то имплементить)

Google
Roquie
19.04.2017
15:32:14
Кстати, никого не смущает то, что если мы выносим апдейт в команду, а команда принимает массив из формы, оно становится не особо юзабельным в дальнейшем?

Хотя с другой стороны, один черт, этой логики не должно быть в контроллере

Aleh
19.04.2017
15:36:29
я не понял сути вопроса

Roquie
19.04.2017
15:40:34
Я к тому, что когда обновляешь запись, тот код который я привел выше может сильно разрастись (на больших таблицах особенно) и он просится, чтобы его куда-то вынесли. Но после выноса, он переиспользован, скорее всего, не будет.

Sergey
19.04.2017
15:41:11
ну то есть я не понимаю что и зачем ты вообще делаешь

возьми orientdb и работаю напрямую с агрегатами

без херни с SQL

Roquie
19.04.2017
15:41:46
с большими сущностями особенно*

Sergey
19.04.2017
15:42:00
с большими сущностями особенно*
большие сущности - это много полей? или очень жирные агрегаты?

ну то есть у меня вопрос к декомпозиции

Roquie
19.04.2017
15:42:11
много полей

Sergey
19.04.2017
15:42:17
много полей - не проблема

делаешь value object-ы

и радуешься

апдейт - заменя одного VO на другой

то есть любой апдейт предвращается в инстанцирование объекта

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

Roquie
19.04.2017
15:43:02
и со связями проблем нет?

опять я в рамках реляционки говорю )

Google
Sergey
19.04.2017
15:43:33
связи - это просто поля объектов

ну то есть какая разница string там или object или object[]

это просто стэйт

я не понимю твоих загонов

и что ты хочешь по итогу иметь

какую ты цель приследуешь

Roquie
19.04.2017
15:44:29
разницы нет, только чуть больше гемора при заполнении сущности

Sergey
19.04.2017
15:45:17
о чем ты?

я просто уже потерял нить разговора

Roquie
19.04.2017
15:45:46
))

Sergey
19.04.2017
15:45:51
ты хочешь сделать data mapper + uow поверх eloquent?

Sergey
19.04.2017
15:45:53
в этом нет смысла

Roquie
19.04.2017
15:46:02
хотел

теперь уже не хочу, когда поговорили о доктрине

Sergey
19.04.2017
15:46:34
хотел
зачем?)

Roquie
19.04.2017
15:46:46
теперь буду выкидывать свои persistense репозитории и переводить весь проект на доктрину

Sergey
19.04.2017
15:46:47
ну то есть опять же - какую цель ты приследовал этим желанием?

Google
Roquie
19.04.2017
15:47:05
Sergey
19.04.2017
15:47:23
тестируемость без участия бд
ты уверен что окупится?

ну то есть сделать тупо in-memory базу данных где все гоняется быстро

Roquie
19.04.2017
15:48:37
ты уверен что окупится?
неа, но eloquent мне постоянно вставляет палки в колеса

это уже по другой теме, а не то, что мы тут обсуждаем

Кстати, если использовать репозитории с eloquent без апдейтов, то апдейты будут размазаны где только не лень используя orm напрямую

Сейчас приходится всем этим пичкать репозитории, чтобы работа с базой была в одном месте.

Admin
ERROR: S client not available

Roquie
19.04.2017
16:11:04
Разве ?
ну да, в контроллерах, командах, сервисах

Like
19.04.2017
16:12:55
ну да, в контроллерах, командах, сервисах
Хм, у меня работа с базой в одной папке. По типу: Папка подпапки (юзер, комментарии и т.п). В каждой подпапке есть файл который отвечает полностью за работу с базой. Сама "база" внедряется с помощью DI, а методы хранятся вообще в другом месте (Но там что-то типа делегирования). Вроде бы не плохо Не знаю, поймешь или нет

Like
19.04.2017
16:15:33


А Eloquent ну нахер, я переходил с query builder'a на это, посидел пару месяцев и свалил. Связи удобная штука ( в плане кода), но потом по откладке (и еще кое-что) жопа. Тем более, что я могу сделать так

И не нужны джоины )

И связи тоже

Аналогично, правда в контроллерах/коммандах я внедряю интерфейс репозитория, который уже работает с Eloquent.
В контроллерах я просто беру провайдер app()->make('name') и вызываю его методы, это все что могут эти контроллеры) А модели я кинул в папку app\eloquent, там сейчас ничего кроме свойств (аля hidden, name и т.п).

Выше на скрине image ($this->image) - и есть класс App\Eloquent\Image

Roquie
19.04.2017
16:18:24
Выше на скрине image ($this->image) - и есть класс App\Eloquent\Image
это чем-то и напоминает репозиторий

Google
Like
19.04.2017
16:18:38
Практически он ?

В общем: App\Eloquent\Class - чисто extends Eloquent Папка - подпапки - сущность . Тут через DI внедряю класс из папки eloquent и пишу делегаторы. Вон как выше И еще одна папка с подпапками - сущность: тут я через DI внедряю нужный мне выше класс, ну и описываю логику

Все это через провайдер. Ну и контроллер "хавает" последнее

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

Roquie
19.04.2017
16:23:37
> Только не знаю как поступать с некоторыми частями системы которые не особо относятся к сайту. вынести в композер пакет?

Like
19.04.2017
16:24:55
Если так поступать, то нужно делать "универсальную систему". Я изначально думал дергать токен юзера с помощью готового средства в самой системе, то есть: зависимость. Я не думал насчет этого еще если честно, но вариант хороший, спасибо )

Yegor
19.04.2017
18:54:51
Коллеги, разрешите похвастаться, второй том Elegant Objects наконец закончен и уже в продаже на Амазоне: http://amzn.to/2oW9qk4 Будет доступен доставкой по странам СНГ через две недели. Пишите на shop@yegor256.com

Oleg
20.04.2017
13:03:54
Будет ли на русском языке ???

Ilia
20.04.2017
13:04:41
Зачем?

Oleg
20.04.2017
13:05:31
Чтобы такие неграмотные как я тоже могли прочитать )

К сожалению бегло читать по английски не удается...

Но когда надо перевожу статьи для себя

Aleh
20.04.2017
13:07:03
посоны, самый сложный вопрос программирования: как назвать класс представляющий деньги с суммой больше 0?

Oleg
20.04.2017
13:07:39
NoNullMoney )))

PlusMoney ))

Aleh
20.04.2017
13:08:33
А чем не кошелек? а ноль может быть?
кошелек это какая-то сущность)

ну как-то связь между тем, что денег больше 0 и кошелек не оч очевидна

Ilia
20.04.2017
13:09:09
Ну деньги как таковые не могут иметь сумму, они могут иметь номинал

andretshurotshka?❄️кде
20.04.2017
13:09:21
Cash

Ilia
20.04.2017
13:09:36
Cash
Да хорошая метафора:)

Страница 183 из 785