@oop_ru

Страница 122 из 785
Sergei
25.02.2017
08:09:04
Ну я как раз про это - считать ли например persistence частью бизне-логики / поведения объекта, или нет?

Sergey
25.02.2017
08:09:35
Sergei
25.02.2017
08:09:42
Если считать - то по моему разумению active record как-то не особо анемично выглядит.

Google
Sergey
25.02.2017
08:10:15
потому что того требует бизнес логика или потому что у тебя есть ограничения в духе "я не могу просто оставить объект висеть в памяти и мне надо куда-то его сохранить, но бизнесу плевать куда и почему"

Ок, убедительно.
persistance layer это часть инфраструктуры. То без чего проект работать не будет но это что-то что не влияет на бизнес логику от слова совсем. И в идеале бизнес логика вообще ничего не должна об этом знать.

но последнего добиться весьма и весьма сложно

Sergei
25.02.2017
08:13:09
Да, собственно оно после вопроса "как соотносится с бизнесом" все стало на свое места.

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

Таким образом наличие какого-то кода для сохранения в active record на анемичность не то чтобы как-то влияло.

Спасибо!

Sergey
25.02.2017
08:17:38
а можешь сказать чем плохи анемичные модели?)

Sergei
25.02.2017
08:20:29
в моём разумении - примерно тем же, чем и глобальные данные

Sergey
25.02.2017
08:21:03
ну ты можешь схитрить и навесить проверку инвариантов на стэйт, и дергать проверки всякий раз как мы меняем стэйт

ну то есть не все так плохо как тупо с глобальным стэйтом

Sergei
25.02.2017
08:23:22
отсутствием контроля доступа?
раскрытием внутреннией реализации в первую очередь - и отсутстивие контроля доступа я рассматриваю как последствие оного

Google
Sergei
25.02.2017
08:24:56
данные вынужденно торчат наружу - сложнее отследить кто когда и по каким правилам их изменяет. следствие этого - сложно одним взглядом охватить код, описывающий правила этоих изменений - говоря иными словами, есть данные, но сложно разорбраться что является поведением над ними.

Sergey
25.02.2017
08:25:26
а вот последнее - соглашусь

ну мол что мы ничерта не знаем о поведении

Sergei
25.02.2017
08:27:00
опять же, у тебя есть одно место где лежит стэйт, и ты можешь спокойно трекать остается ли стэйт валидным.
это мне кажется менее существенным - именно по причине возможности валидации (о чем ты как раз и написал)

ну мол что мы ничерта не знаем о поведении
в моей практике это чуть не основная пробема вообще в разработке - "хз как оно работает". со всеми вытекающими последствиями - сложно maintain, сложно расширять, сложно модифицировать, сложно knowledge transfer и т.д.

Sergey
25.02.2017
08:29:03
ну тип того да)

с другой стороны если ты будешь иметь отдельную модель данных и она будет использоваться в контексте конкретного доменного объекта - весь профит сохраняется

проблемы то не в целом с объектами без стэйта - их можно как структуры данных воспринимать. А проблема в том что их как доменные объекты используют и это вызывает расползание логики

ну мол даже AR - ты можешь делать полноценую модель с ним

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

Sergei
25.02.2017
08:31:22
теперь мне идея более ясна

спасибо

Sergey
25.02.2017
08:31:32
просто AR подразумевает что логики мало, а если ее много - надо просто уже смотреть в сторону Row Data GAteway

Evgeniy
25.02.2017
13:05:53
а какие еще есть варианты кроме active record, data mapper, row data gateway ?

Evgeniy
25.02.2017
13:06:25
так про dao Знал

Sergey
25.02.2017
13:06:27
в целом оно покрывает все потребности

Evgeniy
25.02.2017
13:06:40
но он очень похож на data mapper :D

Sergey
25.02.2017
13:06:52
но он очень похож на data mapper :D
нуууу.... как сделаешь так и будет)

Google
Sergey
25.02.2017
13:07:04
ты можешь внутри dao юзать AR илли data mapper

Evgeniy
25.02.2017
13:07:16
верней у нас давно было забавно, юзали hibernate а потом над hibernate был dao

а над dao слой сервисов)

Sergey
25.02.2017
13:07:51
зачем вам хибернейт тогда)

Evgeniy
25.02.2017
13:08:22
ага было забавно, там я был девелопером прост)

Sergey
25.02.2017
13:09:03
вот я сейчас сижу и думаю... вот есть у меня ORM... она мне сущности выплевывает... для операций записи вообще чудо

а вот чтение...

Evgeniy
25.02.2017
13:09:13
там была очень "прикольная" архитектура (для крупного заказчика)

да мне orm Не нравится на чтение

Sergey
25.02.2017
13:09:26
мне надо тупо выплюнуть массивчик джесонкой... нафиг мне этот жирнющий слой для этого

Evgeniy
25.02.2017
13:09:45
мне орм не нравится

Sergey
25.02.2017
13:09:48
сижу и размышляю над плюсами и минусами различных подходов к этому добру

Evgeniy
25.02.2017
13:10:06
я думал над вариантом что почему бы не сделать QueryInterface

и объекты которые разные запросы создают и placeholder проставляют

Sergey
25.02.2017
13:10:32
с одной стороны здорово было бы выплевывать сразу DTO, с другой стороны это мне надо доктрину для этого допиливать.... с другой стороны можно сделать просто спецификации и самому гедрировать резальтаты на те же DTO или массивчики

но это муторно

Evgeniy
25.02.2017
13:10:41
и некий QueryManager ( как EntityManager)

Sergey
25.02.2017
13:10:50
и некий QueryManager ( как EntityManager)
ну у меня он Finder называется

``` interface Finder { public function find(Query $query); }

Evgeniy
25.02.2017
13:11:15
получилось бы легко делать выборки различные

Google
Evgeniy
25.02.2017
13:11:26
опа опа

и как такая архитектура ? я просто о таком думал но на бою не проверял

Sergey
25.02.2017
13:12:20
и как такая архитектура ? я просто о таком думал но на бою не проверял
ну у меня там сущности пока выплевываются.... потому разницы особо нет) просто каждой выборке свой QUERY

нужен поиск по каталогу - ProductSearchQuery

Evgeniy
25.02.2017
13:12:39
а маппинг query на сущность?

Sergey
25.02.2017
13:12:56
а маппинг query на сущность?
не, там внутри через доктриновский query buider пока-что

Evgeniy
25.02.2017
13:13:06
получается есть сущность

которая внутри создает query и получает результаты

Sergey
25.02.2017
13:13:23
я сейчас пытаюсь запилить в доктрину фичу что бы можно было делать так

Evgeniy
25.02.2017
13:13:26
и это все скрыто (инкапсулированно)

Admin
ERROR: S client not available

Sergey
25.02.2017
13:14:01
select new ProductItemView( p.id, p.details // embeddable штука m.profile // embeddable штука )

public function find(Query $query) { $qb = $this->em->createQueryBuilder(); return $query->prepare($qb)->getQuery()->getResult(); }

Evgeniy
25.02.2017
13:15:03
я просто к этой идеи пришел но не видел чтобы где то это применялось

Sergey
25.02.2017
13:15:32
у тебя что-то похожее?

Evgeniy
25.02.2017
13:15:32
ога да

я к этому пришел но пока проект не таким образом

я просто думал что это было бы удобно

Sergey
25.02.2017
13:16:03
я такой подход в сыром виде уже пол года применяю на своих проектах

Google
Sergey
25.02.2017
13:16:06
в целом народу нравится

но мне не нравится)

Evgeniy
25.02.2017
13:16:15
но только работу над бд сделать не через доктрину а через pdo

Sergey
25.02.2017
13:16:20
ну то есть сама идея как по мне логична, но реализация отстой

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

Evgeniy
25.02.2017
13:16:37
я думал сделать либу чисто для проверки

а потом может обкатать на практике

Sergey
25.02.2017
13:16:48
https://github.com/K-Phoen/rulerz

может натолкнет тебя на мысли какие

как по мне крутая штука НО оно хочет уметь слишком много)

Evgeniy
25.02.2017
13:17:48
ну я не очень сторонник Query билдеров

которые в oop стиле

чуваки не хотят понимать sql и придумывают oop обертки

посмотрю либу может свое что по напишу)

Sergey
25.02.2017
13:18:50
чуваки не хотят понимать sql и придумывают oop обертки
проблема в "не хотят понимать SQL" а в желании делать композицию

ну мол...

$query = someCriteria() + someOtherCriteria() + someOtherStuff();

c SQL ты такое не провернешь

да и некоторые вещи удобнее выражать

SQL то для query builder-ов всеравно надо знать

Evgeniy
25.02.2017
13:20:36
ну да возможно

это холиварно надо делать prof of concept и смотреть)

возможно какой проект на таком делать

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